Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-100671-poc — 仅本地概念验证验证器,用于 CVE-2026-100671,复现针对回环目标的 Grav Twig 页面缓存会话 Cookie 泄露与重放。 | Kitploit
工具/GitHubGitHub/canhieu/cve-2026-100671-poc
漏洞分析漏洞利用Web应用程序漏洞利用安全虚拟化Web安全渗透测试
GitHubcanhieu/cve-2026-100671-poc

cve-2026-100671-poc

仅本地概念验证验证器,用于 CVE-2026-100671,复现针对回环目标的 Grav Twig 页面缓存会话 Cookie 泄露与重放。

查看仓库
2321天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-100671 — Grav Twig 会话 Cookie 泄露

针对 Grav 内容 Twig/页面缓存会话接管漏洞的最小化、限定目标范围攻击方验证器,该漏洞已在 Grav 2.0.25 中修复。

公告:

  • CVE-2026-100671
  • GHSA-pp89-h475-7gj6
  • Grav 2.0.25 发布

重要:无管理员凭据

攻击者不拥有管理员用户名或密码。

真实的攻击链是:

  1. 一个低权限页面写入者发布 Twig 载荷。
  2. 管理员访问该公开页面一次。
  3. 攻击者匿名请求同一页面。
  4. 共享页面缓存返回管理员会话 Cookie。
  5. 攻击者针对 API 重放该 Cookie。

管理员操作发生在本脚本之外。exploit.py 不接受 GRAV_ADMIN_USERNAME 或 GRAV_ADMIN_PASSWORD 设置。

范围

回环地址是默认的安全边界。非回环目标需要显式指定 --allow-remote 标志,该标志适用于已授权的 HTB、TryHackMe 或 自有实验机器。

客户端仅在重定向保持在所选目标源内时才跟随重定向, 使用 Python 标准库 HTTP 客户端,应用请求超时,并且仅在显式提供 --show-cookie 时才打印捕获的 Cookie。

仅可针对你拥有或明确获授权测试的 Grav 实例使用。 该脚本会创建一个公开的证明页面。如果目标在多次运行之间保留内容, 请在测试后删除该页面。

漏洞链

  1. 一个低权限页面写入者发布包含沙箱化 Twig 的内容。
  2. get_cookie() 在服务端读取访问管理员的会话 Cookie。
  3. Grav 将 Twig 处理后的页面输出存入缓存,且不包含会话身份。
  4. 未认证请求收到缓存的 Cookie 名称和值。
  5. 针对目标 API 重放该值即以管理员身份通过认证。

页面写入账户仅需低权限写入路径。它不需要 api.pages.read、admin.*、超级管理员访问权限或管理员凭据。

受影响版本

  • Grav 2.0.19 至 2.0.24:在随附的默认内容 Twig 配置下存在漏洞。
  • Grav 2.0.0 至 2.0.18,以及 1.7.x:仅在显式启用内容 Twig 时受影响。
  • Grav 2.0.25:已修复。

实验环境要求

运行 Grav 目标,需具备:

  • 已启用 Grav API 插件;
  • 一个低权限写入者账户,能够获取 API 令牌并创建页面;
  • 一个管理员账户用于受害者操作;
  • 目标页面路由可公开读取。

此双文件仓库不提供 Grav、PHP、插件、账户或 管理员机器人。受害者访问仍为外部操作。

一次性交互运行

仅设置低权限写入者凭据或令牌:

export GRAV_TARGET=http://127.0.0.1:8080
export GRAV_WRITER_USERNAME=low
export GRAV_WRITER_PASSWORD='local-writer-password'

python3 exploit.py

脚本会创建一个随机公开路由,打印其 URL,然后等待。让管理员访问该 URL 一次,然后按 Enter。脚本会执行匿名收集和本地 API 重放。

改用现有的 writer API token:

export GRAV_WRITER_TOKEN='local-low-privilege-token'
python3 exploit.py

两阶段运行

适用于非交互式终端或独立的受害者浏览器。

准备页面:

python3 exploit.py --prepare-only

让管理员访问打印出的 URL。然后使用打印出的路由进行收集和重放;此第二阶段无需凭据:

python3 exploit.py --collect-only --route /cookie-proof-XXXXXXXX --show-cookie

--show-cookie 打印捕获的会话 cookie,用于本地/授权实验室调试:

captured_cookie=grav-site-<hash>=<session-value>

该值是一个有效凭据。请勿将其粘贴到 GitHub、issue、聊天、截图或日志中。在不使用 --show-cookie 的情况下,脚本会通过重放状态证明同样的影响,同时避免该值出现在输出中。

如果收集在管理员访问之前运行,攻击者请求可能会用空值填充缓存。请准备一个新的随机路由并重复操作。

请勿在仓库中硬编码机器 IP。请在运行时提供当前目标:

export GRAV_WRITER_USERNAME=low
export GRAV_WRITER_PASSWORD='writer-password'

python3 exploit.py \
  --target http://10.10.10.25:8080 \
  --allow-remote \
  --prepare-only

在管理员/机器人访问打印出的 URL 后,收集并重放:

python3 exploit.py \
  --target http://10.10.10.25:8080 \
  --allow-remote \
  --collect-only \
  --route /cookie-proof-XXXXXXXX \
  --show-cookie

--base-url 仍然是 --target 的兼容性别名。远程 HTTP 会打印明文警告;在机器支持的情况下请使用 HTTPS。

预期的易受攻击结果

page_create_status=201
victim_action_url=http://127.0.0.1:8080/cookie-proof-XXXXXXXX
anonymous_page_status=200
cookie_name_disclosed=yes
cached_cookie_visible_to_attacker=yes
captured_cookie=grav-site-<hash>=<session-value>
replayed_cookie_api_status=200
result=VULNERABLE

captured_cookie 行仅在指定 --show-cookie 时出现。

修复版本检查

对 Grav 2.0.25 或更高版本运行相同的两阶段流程,然后使用以下命令收集:

python3 exploit.py --collect-only --route /cookie-proof-XXXXXXXX --expect fixed

预期修复后的行为:攻击者不可见会话值,且会话重放不成功。使用 --expect fixed 时,修复后的干净结果会以 0 退出。

修复措施

升级到 Grav 2.0.25 或更高版本。对于较旧的部署,公告列出了以下临时控制措施:

  • 通过 security.twig_content.process_enabled: false 禁用内容 Twig;或
  • 设置 system.pages.never_cache_twig: true;
  • 清除现有的 Grav 缓存;
  • 轮换管理员会话。

不要将 HttpOnly、Secure 或 SameSite 视为修复措施:存在漏洞的 cookie 读取发生在 Twig 渲染期间的服务端。

披露

由 canhieu 报告。本仓库是对已公开公告的可复现性辅助工具,而非远程扫描器或凭据收集工具。

下载工具