(2023.05.30. ─ sérülékenység leírással frissítve)
Egy biztonsági kutató PoC eszközt adott közre “KeePass 2.X Master Password Dumper” néven, amely lehetővé teszi a KeePass mesterjelszó lekérdezését. Az eszköz a KeePass eddig még nem javított, CVE-2023-32784 néven nyomon követett sebezhetőségét használja ki arra, hogy a KeePass 2.x verziók esetén a memóriájából kinyerje a mesterjelszót.
A KeePass egy széleskörben alkalmazott, ingyenes nyílt forráskódú szoftver, amelyet jelszavak biztonságos kezelésére használnak. Digitális széfként működik, ahol a felhasználók tárolhatják és rendszerezhetik érzékeny adataikat, beleértve a jelszavakat, hitelkártyaszámokat, jegyzeteket és egyéb érzékeny információkat. A széf tartalmát egyetlen mesterjelszó (vagy kulcs) megadásával titkosítjuk le és csak ennek megadásával érhetjük el a benne szereplő információkat.
“A 2.54 előtti, 2-es főverziójú KeePassban lehetséges a mesterjelszó visszanyerése plaintextben egy memóriadumpból, még akkor is, ha a workspace le van zárva vagy már nem fut. Ez lehet swap vagy hibernációs file, process vagy a teljes rendszer RAM dumpja.” ─ olvasható a sebezhetőség leírásában.
A probléma abból ered, hogy a KeePass egy saját fejlesztésű szövegdobozt (“SecureTextBoxEx”) használ a jelszó bevitelére. Ezt a szövegdobozt nem csak a mesterjelszó bevitelére használják, hanem a KeePass más helyein is, például a jelszószerkesztő mezőkben, lehetővé téve a támadó számára, hogy ezzel a dobozok tartalmát visszanyerje.
Minden beírt karakterhez egy maradék karakterlánc jön létre a memóriában.
“A .NET működése miatt szinte lehetetlen megszabadulni tőle, ha egyszer létrejön. Például a “Password” beírásakor ezek a maradék karakterláncok keletkeznek: •a, ••s, •••s, ••••w, •••••o, ••••••r, •••••••d. A POC alkalmazás ezeket a mintákat keresi a dumpban, és a jelszó minden egyes pozíciójára felajánl egy valószínű jelszó karaktert” ─ olvasható a biztonsági szakember bejegyzésben.
A támadás sikere attól függ, hogy munkamenetenként hány jelszót és hogyan gépeltek be a felhasználók. A szakértő kifejtette, hogy még ha több jelszó vagy elgépelés is történt, a .NET CLR által kiosztott módon a sztringek valószínűleg szépen elrendeződnek a memóriában. Ha például a felhasználó három különböző jelszót gépelt be, a támadó valószínűleg minden egyes karakterpozícióra három jelöltet kap ebben a sorrendben, így mindhárom jelszót vissza tudja állítani.
A kutatók rámutattak, hogy a jelszót csak akkor lehet visszakeresni, ha azt begépelték, nem pedig vágólapról másolták be.
A probléma megoldására kiadott első javítás közvetlenül a Windows API függvényeket hívja meg a szövegdoboz tartalmának lekérdezésére/beállítására (getter/setter), hogy elkerülje az említett sztringek létrehozását.
A jó hír az, hogy a CVE-2023-32784 sebezhetőséget csak helyi támadó tudja kihasználni.
Javítás még nem érhető el
A sebezhetőség a fejlesztő közlése szerint a 2.54-es verzióban kerül javításra, amely a tervek szerint 2023. június elején jelenik meg.
Amint a KeePass 2.54 elérhető lesz, ajánlott annak frissítése. Mindemelett a szakértő azt javasolja, hogy:
- Változtassa meg a fő jelszavát!
- Törölje a hibernációs fájlt!
- Törölje a pagefile/swapfile-t!
- Írja felül a törölt adatokat a HDD-n (pl. Cipher a /w-vel Windowson)!
- Indítsa újra a számítógépet!
Ezek kiváltására az operációs rendszer újratelepítése is megoldás.