Veszélyben lehet a KeePass jelszószéf tartalma!

(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.

(securityaffairs.com)

Vonatkozó sérülékenység leírás az NBSZ NKI weboldalán:

CVE-2023-32784