Grav CMS 高危路径遍历漏洞解析:任意YAML写入可导致账户接管与系统损坏

本文详细分析了CVE-2025-66295,一个影响Grav内容管理系统的高危漏洞。攻击者通过在创建用户时构造包含路径遍历序列的用户名,可实现任意YAML文件写入,从而导致账户完全被接管、系统配置文件被破坏等严重后果。

Grav vulnerable to Path traversal / arbitrary YAML write via user creation leading to Account Takeover / System Corruption · CVE-2025-66295 · GitHub Advisory Database · GitHub

漏洞详情

composer getgrav/grav (Composer)

受影响版本 < 1.8.0-beta.27

已修复版本 1.8.0-beta.27

描述

概述 当拥有用户创建权限的管理员通过Admin UI创建新用户,并提交一个包含路径遍历序列(例如 ..\Nijat../Nijat)的用户名时,Grav会将账户的YAML文件写入到 user/accounts/ 目录之外的意外路径。写入的YAML可以包含账户字段,如电子邮件、全名、twofa_secret和哈希密码。在测试中,攻击者能够使Admin UI将任意内容写入到任意的.yaml文件中(包括 email.yamlsystem.yaml 或其他站点YAML文件如 admin.yaml)——这证明了通过Admin UI可以实现任意的YAML写入/覆盖。

示例观察到的由Admin UI写入的内容(测试数据):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
username: ..\Nijat
state: enabled
email: EMAIL@gmail.com
fullname: 'Nijat Alizada'
language: en
content_editor: default
twofa_enabled: false
twofa_secret: RWVEIHC2AFVD6FCR6UHCO3DS4HWXKKDT
avatar: { }
hashed_password: $2y$10$wl9Ktv3vUmDKCt8o6u2oOuRZr1I04OE0YZf2sJ1QcAherbNnk1XVC
access:
  site:
    login: true

复现步骤

  1. 以管理员身份登录Grav Admin UI。
  2. 创建新用户并填写以下值(示例): a. 用户名:..\POC-TOKEN-2025-09-29 b. 全名:POC-TOKEN-2025-09-29 c. 电子邮件:poc+2025-09-29@example.test d. 密码:(任意密码)
  3. 观察到一个包含POC-TOKEN的YAML文件被写入到 user/accounts/ 目录之外(例如在 user/accounts/ 的父目录中)。

影响

  • 配置损坏/服务中断:用攻击者控制的YAML覆盖 system.yamlemail.yaml 或插件配置文件(即使仅限于账户YAML中存在的字段)可能会破坏功能、禁用服务或导致配置错误,需要从备份中恢复。
  • 账户接管:任何拥有创建用户权限的用户,只需创建一个名为 ..\accounts\USERNAME_OF_VICTIM 的新用户,就可以修改其他用户的电子邮件和密码。

概念验证 https://github.com/user-attachments/assets/cf503d74-f765-4031-8e22-71f6b3630847

参考

严重性

严重等级:高

CVSS 总分:8.8 / 10

CVSS v3 基础指标

  • 攻击向量 (AV):网络 (N)
  • 攻击复杂度 (AC):低 (L)
  • 所需权限 (PR):低 (L)
  • 用户交互 (UI):无 (N)
  • 作用域 (S):未更改 (U)
  • 机密性影响 (C):高 (H)
  • 完整性影响 (I):高 (H)
  • 可用性影响 (A):高 (H)

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

弱点

弱点 CWE-22 不恰当的限制目录路径名(路径遍历) 产品使用外部输入来构造一个旨在标识位于受限父目录下的文件或目录的路径名,但产品未能正确中和路径名中的特殊元素,这些元素可能导致路径名解析到受限目录之外的位置。在MITRE上了解更多。

标识符

  • CVE ID: CVE-2025-66295
  • GHSA ID: GHSA-h756-wh59-hhjv

源代码

getgrav/grav

致谢

报告者:NicatAliyevh

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计