mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
8.7 KiB
8.7 KiB
LanMountainDesktop 安全审计报告
项目: LanMountainDesktop 审计日期: 2026-05-24 审计范围: 代码库安全性系统性评估 审计方法: 静态代码分析 + 架构审查 + 攻击面映射
执行摘要
本次审计对 LanMountainDesktop 代码库进行了全面的安全评估,系统性地检查了认证与访问控制、注入向量、外部交互以及敏感数据处理等高风险攻击面。
审计结论: 发现 5 个已确认的中等及以上严重度漏洞,均具有可论证的利用路径。
已确认漏洞
漏洞 #1 - PostHog API Key 硬编码(高严重度)
| 属性 | 详情 |
|---|---|
| 严重度 | 高 |
| CWE | CWE-798 - 使用硬编码凭证 |
| 位置 | PostHogUsageTelemetryService.cs:14 |
| 攻击者画像 | 源代码仓库的任何访问者(通过代码泄露、供应链攻击或Git历史) |
| 可控输入 | 无(静态硬编码密钥) |
代码路径:
// PostHogUsageTelemetryService.cs:14
private const string PostHogApiKey = "phc_bhQZvKDDfsEdLT6kkRFvrWMT8Pc5aCGGsnxoc5ijSf9";
影响:
- 攻击者可滥用此 API Key 向 PostHog 项目发送伪造遥测数据
- 可能导致遥测数据污染,干扰产品分析决策
- API Key 暴露在公开仓库中,任何人都能获取并滥用
修复建议:
private static string GetPostHogApiKey()
{
var key = Environment.GetEnvironmentVariable("POSTHOG_API_KEY");
if (string.IsNullOrEmpty(key))
throw new InvalidOperationException("PostHog API key not configured.");
return key;
}
漏洞 #2 - Sentry DSN 硬编码(高严重度)
| 属性 | 详情 |
|---|---|
| 严重度 | 高 |
| CWE | CWE-798 - 使用硬编码凭证 |
| 位置 | SentryCrashTelemetryService.cs:15 |
| 攻击者画像 | 源代码仓库的任何访问者 |
| 可控输入 | 无(静态硬编码密钥) |
代码路径:
// SentryCrashTelemetryService.cs:15
private const string SentryDsn = "https://f2aad3a1c63b5f2213ad82683ce93c06@o4511049423257600.ingest.us.sentry.io/4511049425813504";
影响:
- Sentry DSN 等同于项目的访问凭证
- 攻击者可利用此 DSN 向项目发送伪造崩溃报告
- 可能导致崩溃数据污染,干扰错误追踪
- 如 DSN 配置不当,可导致敏感崩溃信息被发送至攻击者控制的端点
修复建议:
private static string GetSentryDsn()
{
var dsn = Environment.GetEnvironmentVariable("SENTRY_DSN");
if (string.IsNullOrEmpty(dsn))
throw new InvalidOperationException("Sentry DSN not configured.");
return dsn;
}
漏洞 #3 - 小米天气 API 签名密钥硬编码(高严重度)
| 属性 | 详情 |
|---|---|
| 严重度 | 高 |
| CWE | CWE-798 - 使用硬编码凭证 |
| 位置 | XiaomiWeatherService.cs:25 |
| 攻击者画像 | 源代码仓库的任何访问者 |
| 可控输入 | 无(静态硬编码密钥) |
代码路径:
// XiaomiWeatherService.cs:25
public string Sign { get; init; } = "zUFJoAR2ZVrDy1vF3D07";
影响:
- API 签名凭证暴露在公开仓库
- 攻击者可能利用此凭证访问天气服务 API
- 可能导致 API 配额滥用或服务成本增加
- 如密钥具有更高权限,可能导致数据泄露
修复建议:
public string Sign { get; init; } = Environment.GetEnvironmentVariable("XIAOMI_WEATHER_SIGN") ?? "";
漏洞 #4 - Sentry PII 收集配置(中等严重度)
| 属性 | 详情 |
|---|---|
| 严重度 | 中等 |
| CWE | CWE-359 - 个人身份信息(PII)意外暴露 |
| 位置 | SentryCrashTelemetryService.cs:212 |
| 攻击者画像 | Sentry 后端管理员、内部威胁或数据泄露事件 |
| 可控输入 | 用户环境的机器名、用户名、IP地址等系统信息 |
代码路径:
// SentryCrashTelemetryService.cs:212
options.SendDefaultPii = true;
影响:
SendDefaultPii = true配置会收集和上报用户 IP 地址- 可能违反隐私法规(如 GDPR、中国个人信息保护法)要求
- 在崩溃报告中可能暴露用户敏感信息
- 用户未明确同意即被收集 PII
修复建议:
// 根据用户同意状态动态设置
options.SendDefaultPii = TelemetryEnvironmentInfo.IsTelemetryPiiAllowed();
漏洞 #5 - SSL 证书验证被禁用(中等严重度)
| 属性 | 详情 |
|---|---|
| 严重度 | 中等 |
| CWE | CWE-295 - 证书验证不正确 |
| 位置 | RecommendationDataService.cs:105 |
| 攻击者画像 | 网络中间人攻击者(在同一网络环境的攻击者) |
| 可控输入 | 用户网络流量 |
| 利用路径 | 用户发起API请求 → 攻击者拦截流量 → 伪造响应 |
代码路径:
// RecommendationDataService.cs:100-106
var handler = new HttpClientHandler
{
SslProtocols = System.Security.Authentication.SslProtocols.Tls12 |
System.Security.Authentication.SslProtocols.Tls13,
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
};
影响:
- 禁用了服务器证书验证,使应用程序容易受到中间人(MITM)攻击
- 攻击者可以拦截和篡改 API 响应数据
- 可能导致注入恶意内容或数据操纵
- 即使使用 TLS 1.2/1.3,证书验证被禁用仍然不安全
修复建议:
var handler = new HttpClientHandler
{
SslProtocols = System.Security.Authentication.SslProtocols.Tls12 |
System.Security.Authentication.SslProtocols.Tls13,
// 删除 ServerCertificateCustomValidationCallback 或实现正确的验证
};
未发现漏洞的区域
经过系统性审计,以下区域未发现中等及以上严重度的已确认漏洞:
认证与访问控制
- 单实例服务实现正确(使用互斥体)
- IPC 通信使用命名管道,无明显认证绕过风险
- 插件隔离使用独立进程边界
- 插件加载使用 AppDomain/AssemblyLoadContext 隔离
注入向量
- SQLite 使用参数化查询,无 SQL 注入风险 (ComponentDomainStorage.cs)
- JSON 反序列化使用强类型上下文 (
JsonSerializerContext),无反序列化漏洞 - 文件路径操作使用
Path.Combine和Path.GetInvalidFileNameChars()过滤 - 未发现命令执行注入(Process.Start 使用固定参数)
外部交互
- HTTP 请求使用
HttpClient和超时配置 - Webhook/回调 URL 使用
Uri.EscapeDataString编码 - 下载服务验证目标路径,无路径遍历风险
- URL 参数正确使用编码函数
敏感数据处理
- 数据库本地存储,使用 WAL 模式
- 设置数据通过 JSON 序列化存储在用户目录
- 日志文件路径正确隔离在应用数据目录
架构安全评估
| 组件 | 安全评级 | 说明 |
|---|---|---|
| 插件系统 | 良好 | 使用独立进程隔离 |
| IPC 通信 | 良好 | 命名管道通信,进程边界隔离 |
| 更新系统 | 良好 | 支持签名验证 |
| 遥测系统 | 需改进 | 存在硬编码凭证和 PII 配置问题 |
| 数据存储 | 良好 | 使用标准加密实践 |
| 网络通信 | 需改进 | 存在证书验证绕过问题 |
修复优先级
| 优先级 | 漏洞 | 严重度 | 预计工作量 |
|---|---|---|---|
| P0 - 紧急 | #1 PostHog API Key | 高 | 低 |
| P0 - 紧急 | #2 Sentry DSN | 高 | 低 |
| P0 - 紧急 | #3 Xiaomi Weather Sign | 高 | 低 |
| P1 - 高 | #4 SendDefaultPii | 中 | 低 |
| P1 - 高 | #5 SSL 证书验证禁用 | 中 | 中 |
建议的安全改进
- 实施密钥管理: 使用环境变量或密钥管理服务存储所有 API 凭证
- 添加密钥扫描: 在 CI/CD 流程中集成 secrets scanning(如 GitGuardian、trufflehog)
- 隐私合规审查: 确认遥测数据收集符合当地隐私法规要求
- 证书验证修复: 移除禁用的证书验证,确保 HTTPS 通信安全
- 代码审计: 建议进行定期安全审计
报告生成工具: 自动安全审计系统 审计方法: 静态代码分析 + 架构审查 + 攻击面映射