首页
社区
课程
招聘
[原创]SandboxiePlus的加密沙盒明文信息窃取方法
发表于: 2025-9-22 09:19 573

[原创]SandboxiePlus的加密沙盒明文信息窃取方法

2025-9-22 09:19
573

SandboxiePlus的加密沙盒明文信息窃取方法

前几天看SandboxiePlus项目的时候发现它的最新漏洞是CVE-2025-54422,关于加密沙盒的密码泄露。非常简单的一个漏洞,就拿到了一个CVE编号。于是,我也研究了一下这个加密沙盒的一些机制。发现也有其他方法可以获取其中的明文信息,给大家分享一下。

CVE-2025-54422

加密沙盒是SandboxiePlus提供的一种沙盒服务,在沙盒创建的时候可以设置密码和加密方式,且密码丢失的话,无法找回,其中的数据自然也就无法解密。而且加密沙盒启动之后,默认主机无法访问加密沙盒挂载的目录,访问沙盒中的进程信息也会被拒绝。
拒绝
内存
这是沙盒中的两重安全防护,试想如果你可以访问挂在目录,其实也可以访问加密沙盒的明文信息,访问沙盒中的进程内存也可以拿到进程写入加密沙盒中的明文。

加密沙盒的运行原理是借助了imdisk虚拟磁盘的能力,在写入或读取虚拟磁盘内容的时候,将读取的内容转发给SandboxiePlus的加解密进程imbox。写操作,imbox加密之后写入虚拟磁盘中;读操作,imbox解密之后传递给外部的程序。

根据CVE-2025-54422的描述,用户在修改加密沙盒密码时,密码是以明文参数被传递给底层的imbox模块的,任何一个进程信息查看工具均可以获取这个明文密码。
CVE-2025-54422
我使用的是procmon,本地复现的结果如下:
密码泄露
这个漏洞产生的代码是在"SandboxiePlus\SandMan\Windows\OptionsGeneral.cpp"的OnSetPassword函数中,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void COptionsWindow::OnSetPassword()
{
    auto pBoxEx = m_pBox.objectCast<CSandBoxPlus>();
    bool bNew = !QFile::exists(pBoxEx->GetBoxImagePath());
    CBoxImageWindow window(bNew ? CBoxImageWindow::eNew : CBoxImageWindow::eChange, this);
    if (bNew) window.SetImageSize(m_ImageSize);
    if (theGUI->SafeExec(&window) == 1) {
        m_Password = window.GetPassword();
        if (bNew) {
            m_ImageSize = window.GetImageSize();
            OnGeneralChanged();
        }
        else {
 
            QStringList Arguments;
            Arguments.append("type=image");
            Arguments.append("image=" + pBoxEx->GetBoxImagePath());
            Arguments.append("key=" + m_Password);
            Arguments.append("new_key=" + window.GetNewPassword());
 
            if (RunImBox(Arguments))
                QMessageBox::information(this, "Sandboxie-Plus", tr("Image Password Changed"));
        }
    }
}
  

可以很明显地看到,新旧密码是通过明文传递的。这个漏洞已经在最新的1.6.2版本中进行了修复。

明文信息窃取方法

第一种

在使用SandboxiePlus的过程中,我发现SandMan.exe进程是可以查看任意一个正在运行加密沙盒的文件的,且目录结构就是真实存储的结构。具体操作:右键一个加密沙盒->沙盒内容->浏览文件,即可看到沙盒中的明文信息,如下:
查看
我又以普通进程启动process hacker发现可以查看和修改SandMan.exe进程的内存,这其实就有一个可以利用的点。
我可以向该进程中注入远程线程,这个远程线程遍历SandboxiePlus沙盒文件目录下面的内容,沙盒文件目录一般是C:\Sandbox\用户名。加密沙盒会有一个xxx.box文件,如果存在这个文件,且对应的目录也存在,表示这个加密沙盒正在被使用,那么可以遍历这个目录中的子目录和文件,将其中的信息拷贝到其他目录中。这样就实现了加密沙盒明文窃取的效果。该方法需要加密沙盒正在使用,不像CVE-2025-54422漏洞那样可以直接抓取加密沙盒的密码。

第二种

上文提到使用ProcessHacker工具查看加密沙盒中进程的内存时,出现了被拒绝的情况。这是因为驱动中使用了ObRegisterCallbacks函数注册了Obj_PreOperationCallback对象回调函数,在线程或进程对象打开或复制的时候被调用。Obj_PreOperationCallback会调用Thread_CheckObject_CommonEx函数来检查是否可以执行线程或进程对象打开或复制操作。其中有部分代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
_FX ACCESS_MASK Thread_CheckObject_CommonEx(
    HANDLE pid, PEPROCESS ProcessObject,
    ACCESS_MASK DesiredAccess, BOOLEAN EntireProcess,
    BOOLEAN ExplicitAccess)
{
    ......
     if (protect_process /*&& MyIsProcessRunningAsSystemAccount(cur_pid)*/) {
                            if ((_wcsicmp(nptr, SBIESVC_EXE) == 0)
                                || Util_IsSystemProcess(cur_pid, "csrss.exe")
                                || Util_IsSystemProcess(cur_pid, "lsass.exe")
                                || Util_IsProtectedProcess(cur_pid)
                                || (_wcsicmp(nptr, L"conhost.exe") == 0)
                                || (_wcsicmp(nptr, L"taskmgr.exe") == 0) || (_wcsicmp(nptr, L"sandman.exe") == 0))
                                protect_process = FALSE;    // 表示是否运行执行打开或复制操作,protect_process为false表示允许,否则表示拒绝
            }
    ......
}
  

这部分代码仅check了进程名,进程名在白名单{sbiesvc.exe, csrss.exe, lsass.exe, conhost.exe, taskmgr.exe, sandman.exe},就会被允许。那么如果我修改processhacker.exe为白名单中的进程名,就可打开加密沙盒中的进程。
重命名
后续的方法就像方法一一样,但只能遍历当前加密沙盒的文件目录,拷贝文件。因为SandboxiePlus沙盒之间也做了隔离,不可能让A加密沙盒中的进程可以访问B加密沙盒中的文件。由于注入的线程在沙盒中,遍历目录是遍历的整个系统的目录,如果你只想遍历沙盒目录下的内容,会被重定向新的路径,且向沙盒外部传输文件需要通过网络才能突破沙盒隔离。相比于方法一,方法二较为繁琐且效果不理想。

总结

本篇文章首先介绍了CVE-2025-54422漏洞的成因以及复现的效果,给出了两种可以获取加密沙盒密文信息的攻击手段。我已经向SandboxiePlus的官方邮箱进行了说明,
沟通
新版的1.16.4中进行了防护,但如果攻击者具备管理员权限,方法依旧有效。
修复
官方为了表示感谢,给我发了一个开发者码,可以在不限机器不限时间使用SandboxiePlus的高级功能。大家也可以尝试给官方提相关的问题,应该也可以拿到开发者码。
开发者码


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 5720
活跃值: (5169)
能力值: ( LV13,RANK:310 )
在线值:
发帖
回帖
粉丝
2
关注微信公众号"安全狗的开发日常",回复"DumpConfBoxData"可以获取方法一实现源码
2025-9-22 09:23
0
游客
登录 | 注册 方可回帖
返回