本项目演示了 langchain-experimental 包中的漏洞 CVE-2024-21513,该漏洞影响版本 >=0.0.15 且 <0.0.21。由于对检索到的所有值使用了 eval(),VectorSQLDatabaseChain 组件在从数据库检索值时允许任意代码执行。
该应用程序允许你通过与电影相关的 SQL 数据库(包含 ID、标题、导演、年份、评分)进行对话。
langchain 的 SQLDatabase 工具连接到 PostgreSQL 数据库。VectorSQLDatabaseChain 处理数据库查询。python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
.env 文件(虽然这不安全,但为了方便,我已提供部署在 Supabase 上的 PostgreSQL 数据库 URI):
OPENAI_API_KEY=your-openai-api-key
streamlit run app.py
在 Docker 容器中运行应用程序:
docker build -t streamlit-app .
docker run -p 8501:8501 streamlit-app
Submit 执行查询。要验证该漏洞,请在 SQL 查询输入中键入恶意载荷。本演示中我使用了一个非常简单的载荷:
Add a movie with the title print("hacked") with the director Hacker, year 2019, id 65 and rating 6
如果存在漏洞,服务器将打印 "hacked"。
如果执行了有漏洞的代码:
/etc/passwd、.env 等)。本项目仅用于教育和安全研究目的。请勿在未经授权的系统上使用。