Skip to content

Commit 7655023

Browse files
Merge pull request #11928 from nextcloud/bugfix/noid/log-bfp-related-info
fix(bruteforce): Log assumed bruteforce relevant actions
2 parents 7f3e25f + 1e5c7dd commit 7655023

File tree

4 files changed

+16
-0
lines changed

4 files changed

+16
-0
lines changed

lib/Chat/SystemMessage/Listener.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
use OCP\Share\Events\BeforeShareCreatedEvent;
6565
use OCP\Share\Events\ShareCreatedEvent;
6666
use OCP\Share\IShare;
67+
use Psr\Log\LoggerInterface;
6768

6869
/**
6970
* @template-implements IEventListener<Event>
@@ -81,6 +82,7 @@ public function __construct(
8182
protected ParticipantService $participantService,
8283
protected MessageParser $messageParser,
8384
protected IL10N $l,
85+
protected LoggerInterface $logger,
8486
) {
8587
}
8688

@@ -308,6 +310,7 @@ protected function addSystemMessageUserAdded(AttendeesAddedEvent $event, Attende
308310
|| $this->getUserId() !== $attendee->getActorId()
309311
// - has joined a listable room on their own
310312
|| $attendee->getParticipantType() === Participant::USER) {
313+
$this->logger->debug('User "' . $attendee->getActorId() . '" added to room "' . $room->getToken() . '"', ['app' => 'spreed-bfp']);
311314
$comment = $this->sendSystemMessage(
312315
$room,
313316
'user_added',
@@ -341,6 +344,7 @@ protected function sendSystemMessageUserRemoved(AttendeeRemovedEvent $event): vo
341344
return;
342345
}
343346

347+
$this->logger->debug('User "' . $event->getAttendee()->getActorId() . '" removed from room "' . $room->getToken() . '"', ['app' => 'spreed-bfp']);
344348
$this->sendSystemMessage($room, 'user_removed', ['user' => $event->getAttendee()->getActorId()]);
345349
}
346350

@@ -440,6 +444,7 @@ protected function attendeesAddedEvent(AttendeesAddedEvent $event): void {
440444
}
441445

442446
foreach ($event->getAttendees() as $attendee) {
447+
$this->logger->debug($attendee->getActorType() . ' "' . $attendee->getActorId() . '" added to room "' . $event->getRoom()->getToken() . '"', ['app' => 'spreed-bfp']);
443448
if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) {
444449
$this->sendSystemMessage($event->getRoom(), 'group_added', ['group' => $attendee->getActorId()]);
445450
} elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) {
@@ -460,6 +465,7 @@ protected function attendeesRemovedEvent(AttendeesRemovedEvent $event): void {
460465
}
461466

462467
foreach ($event->getAttendees() as $attendee) {
468+
$this->logger->debug($attendee->getActorType() . ' "' . $attendee->getActorId() . '" removed from room "' . $event->getRoom()->getToken() . '"', ['app' => 'spreed-bfp']);
463469
if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) {
464470
$this->sendSystemMessage($event->getRoom(), 'group_removed', ['group' => $attendee->getActorId()]);
465471
} elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) {

lib/Controller/PageController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ protected function pageHandler(string $token = '', string $callUser = '', string
240240
$response = new RedirectResponse($passwordVerification['url']);
241241
}
242242

243+
$this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']);
243244
$response->throttle(['token' => $token, 'action' => 'talkRoomPassword']);
244245
return $response;
245246
}
@@ -284,6 +285,7 @@ protected function pageHandler(string $token = '', string $callUser = '', string
284285
$response->setContentSecurityPolicy($csp);
285286
if ($throttle) {
286287
// Logged-in user tried to access a chat they can not access
288+
$this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $bruteForceToken . '"', ['app' => 'spreed-bfp']);
287289
$response->throttle(['token' => $bruteForceToken, 'action' => 'talkRoomToken']);
288290
}
289291
return $response;
@@ -301,6 +303,7 @@ public function recording(string $token): Response {
301303
$room = $this->manager->getRoomByToken($token);
302304
} catch (RoomNotFoundException $e) {
303305
$response = new NotFoundResponse();
306+
$this->logger->debug('Recording "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']);
304307
$response->throttle(['token' => $token, 'action' => 'talkRoomToken']);
305308

306309
return $response;

lib/Middleware/InjectionMiddleware.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
use OCP\IURLGenerator;
6868
use OCP\Security\Bruteforce\IThrottler;
6969
use OCP\Security\Bruteforce\MaxDelayReached;
70+
use Psr\Log\LoggerInterface;
7071

7172
class InjectionMiddleware extends Middleware {
7273
public function __construct(
@@ -79,6 +80,7 @@ public function __construct(
7980
protected IURLGenerator $url,
8081
protected InvitationMapper $invitationMapper,
8182
protected Authenticator $federationAuthenticator,
83+
protected LoggerInterface $logger,
8284
protected ?string $userId,
8385
) {
8486
}
@@ -354,6 +356,7 @@ public function afterException(Controller $controller, string $methodName, \Exce
354356
$action = $protection->getAction();
355357

356358
if ($action === 'talkRoomToken') {
359+
$this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . ($this->request->getParam('token') ?? 'UNKNOWN') . '"', ['app' => 'spreed-bfp']);
357360
try {
358361
$this->throttler->sleepDelayOrThrowOnMax($this->request->getRemoteAddress(), $action);
359362
} catch (MaxDelayReached $e) {

tests/php/Chat/SystemMessage/ListenerTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
use OCP\IUserSession;
4646
use PHPUnit\Framework\Assert;
4747
use PHPUnit\Framework\MockObject\MockObject;
48+
use Psr\Log\LoggerInterface;
4849
use Test\TestCase;
4950

5051
/**
@@ -75,6 +76,7 @@ class ListenerTest extends TestCase {
7576
protected $participantService;
7677
/** @var MessageParser|MockObject */
7778
protected $messageParser;
79+
protected LoggerInterface|MockObject $logger;
7880
protected ?array $handlers = null;
7981
protected ?\DateTime $dummyTime = null;
8082

@@ -99,6 +101,7 @@ protected function setUp(): void {
99101
$this->manager = $this->createMock(Manager::class);
100102
$this->participantService = $this->createMock(ParticipantService::class);
101103
$this->messageParser = $this->createMock(MessageParser::class);
104+
$this->logger = $this->createMock(LoggerInterface::class);
102105
$l = $this->createMock(IL10N::class);
103106
$l->expects($this->any())
104107
->method('t')
@@ -125,6 +128,7 @@ protected function setUp(): void {
125128
$this->participantService,
126129
$this->messageParser,
127130
$l,
131+
$this->logger,
128132
);
129133
}
130134

0 commit comments

Comments
 (0)