Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Jak przy włączonym 2FA można się zalogować na dowolnego użytkownika i to bez znajomości jego hasła!? (podatność w popularnym pluginie do WordPressa).

18 listopada 2024, 17:40 | W biegu | komentarzy 7

Really Simple Security – Simple and Performant Security” to dość popularny plugin do WordPressa (~4000000 instalacji). Jak można się domyśleć, służy on do dodatkowego zabezpieczenia instalacji WordPressa….

Przechodząc do szczegółów – podatność CVE-2024-10924 występuje w API REST pluginu (można ją wykorzystać kiedy 2FA zostało aktywowane w pluginie; „na szczęście” jest to domyślnie wyłączone).

Atakujący może bez żadnego hasła ani nawet loginu zalogować się jako dowolny user w WordPress (również jako administrator). Od strony technicznej, wystarczy w odpowiednim żądaniu HTTP podać id użytkownika, na którego chcemy się zalogować (np. id=1) i … w zasadzie tyle. Badacze opisują to tak:

This means that even in the case of an invalid nonce, the function processing continues and invokes authenticate_and_redirect(), which authenticates the user based on the user id passed in the request, even when that user’s identity hasn’t been verified.

Od strony kodu – funkcja check_login_and_get_user() powinna sprawdzić czy użytkownik jest zalogowany. No i sprawdza, ale programiści nic z tym wynikiem nie robią, tylko uruchamiają funkcję authenticate_and_redirect() – która loguje użytkownika o identyfikatorze user_id:

~ms

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Piotr

    Chciałbym, żeby to wyglądało jakby ktoś liczył, że ta funkcja check login wywali jakiegoś exceptiona i nie dojdzie do linijki z returnem, chociaż… gdyby tak było, to powinniśmy być try/catch.
    Prędzej wygląda to tak, jakby ktoś debugowo sobie ustawił łatwe logowanie i zapomniał…

    Odpowiedz
  2. Tou

    A gdzie art o APT?

    Odpowiedz
  3. wk

    Nazwa tego pluginu brzmiałaby dla mnie bardzo podejrzanie ;)
    Nie ma czegoś takiego jak simple security. Jeśli jest, to tylko przez chwilę, bo opiera się na jakimś triku. A triki łatwo obejść.

    Odpowiedz
  4. Dev

    Jak widzę metody z nazwami „get_user_by” to przypomona mi się jak się kodowało 20 lat temu bez żadnych standardów :) Za takie coś dzisiaj seniorzy obcinają łapki.

    Odpowiedz
    • Adrian

      Ale ten get_user_by to standardowa funkcja WordPress, sprawdź dokumentację, może i rączki ucinają, ale ona zapewne istnieje od zarania wordpressa

      Odpowiedz
      • Damian

        Adrian, nie czepiaj się. Przyszedł junior i chciał poszpanować.

        Odpowiedz
    • peteros

      Z ciekawości pytam – dlaczego? Co złego jest w takiej nazwie i jak powinno być „zgodnie ze standardem”?

      Odpowiedz

Odpowiedz