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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
plausible-traffic-notify — Plausible Analytics master d44e104 - 高危 - 远程 - IDOR - PUT traffic-change-notification site_id 批量赋值 | Kitploit
工具/GitHubGitHub/abraxas/plausible-traffic-notify
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/plausible-traffic-notify

plausible-traffic-notify

Plausible Analytics master d44e104 - 高危 - 远程 - IDOR - PUT traffic-change-notification site_id 批量赋值

查看仓库
12天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - plausible-traffic-notify

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  plausible-traffic-notify

plausible-traffic-notify

Plausible Analytics 社区版,GitHub master d44e104ae3943a9240d5cb6b62e67dff0f069d3a(2026-10-16)— Plausible Insights OÜ

类别: IDOR(批量赋值)。可达性: 远程(攻击者已控制的站点的所有者 / 管理员 / 编辑者)。

Plausible.Site.TrafficChangeNotification.changeset/2 仍然转换 :site_id。SiteController.update_traffic_change_notification/2 按已授权的路径域名加载该行,然后对客户端映射执行 Repo.update!。路由 PUT /sites/:domain/traffic-change-notification/:type 位于 :browser + CSRF + AuthorizeSiteAccess [:owner, :admin, :editor, :super_admin] 之下。HTML 表单只提交 threshold。Phoenix 仍然接受额外的键。

whoareme Bug 02 以相同方式修补了 Shield / Goal 的 site_id:绑定 socket.assigns.site.id,停止转换 :site_id。该控制器不在那次修补范围内。启用(POST .../enable)会从 assigns 打上 site_id: site.id。攻击者在自己站点上启用,然后 PUT traffic_change_notification[site_id]=<victim_pk>。唯一索引 (site_id, type)。默认安装没有 spike/drop 行,因此更新成功,该行现在归属于受害者。表名是遗留的 spike_notifications。

自己站点的编辑者将 spike/drop 通知行重新挂载到受害者站点上。收件人仍是攻击者邮箱。Oban 向攻击者发送关于受害者流量的邮件。

ID暂无 CVE
CWECWE-915 / CWE-639
CVSS高:7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L
产品Plausible Analytics
受影响GitHub master d44e104ae3943a9240d5cb6b62e67dff0f069d3a(2026-10-16)。最后一个 CE 标签 v3.2.1(e4f5a87a5570bd61605217e7ceb376636db8eddb,2026-05-15)落后五个月。CE + EE(lib/,而非 extra/lib)。
认证其所控制站点的所有者 / 管理员 / 编辑者。查看者不可。需要 CSRF(同会话 IDOR)。
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18183(http)18184(postgres)18185(clickhouse http)

Plausible Analytics leftovers 的遗留 #2。相同固定版本,另一个包:plausible-editor-invite(People HTML 将 transfer nanoid 泄露给编辑者)。本包是仍然转换 :site_id 的 Shield/Goal 姊妹包。

攻击者能做什么

任何其已控制站点的所有者、管理员或编辑者。需要会话 cookie 和该会话的 CSRF 令牌。他们不需要受害者站点的成员资格。他们不 PUT 受害者路径域名(那会 404)。他们 PUT 自己的域名,附带一个外来的 site_id 整数主键。

权限表(详尽)。与 Signal-Server Dropwizard admin 相同的标准:方法 + 路径、该调用授予什么、侦察 vs 完整性 vs 可用性、实验证明 vs 推断、保持关闭的相邻表面。

轴方法 + 路径授予来源
完整性POST /sites/:attacker_domain/traffic-change-notification/:type/enable 然后 PUT /sites/:attacker_domain/traffic-change-notification/:type,携带 traffic_change_notification[site_id]=<victim_pk>将攻击者的 spike_notifications 行重新挂载到 victim.sites.id 上。收件人仍为攻击者地址。占用唯一的 (site_id, type) 槽位。阈值由攻击者选择(实验中使用 1)。实验验证。 第 1 行将 site_id 从 2 改为 1,收件人为 {[email protected]}
侦察Oban TrafficChangeNotifier 向 notification.recipients 发送邮件主题为 Traffic spike on <victim.domain>。正文包含:当前访客数、前 3 个来源、前 3 个页面。首次发送为立即发送(last_sent 为 nil)。之后最多每 12 小时重复一次。阈值为 1 时,只要受害者有任何当前访客就会发送邮件。除非收件人是团队成员或访客成员(攻击者不是),否则邮件中的仪表盘 HTML / 安装链接会被省略。推断自通知器源码。实验中未捕获邮件(MAILER_ADAPTER=Bamboo.LocalAdapter)
可用性受害者对同一类型执行 POST .../enable唯一约束 (site_id, type) 拒绝。在植入的行被删除之前,受害者无法开启该功能。源码(unique_constraint)
可用性受害者执行 disable(按 site_id 执行 delete_all)如果受害者注意到额外的收件人,可以清除植入的行。源码(disable_traffic_change_notification)

在此固定版本上保持关闭

轴方法 + 路径为何关闭
完整性PUT /sites/:victim_domain/traffic-change-notification/:type路径域名受 AuthorizeSiteAccess 保护。攻击者不是成员。实验验证 404。 attacker-not-member-of-victim=1
完整性Shield / Goal / 漏斗 / 分群 / 共享链接写入whoareme Bug 02 修补了那些 cast :site_id 处理器。它们绑定 assigns。
侦察ClickHouse 转储、Stats API、仪表盘 HTML无成员身份,无共享链接。通知邮件对非成员省略仪表盘链接。
完整性跟踪器数据摄入已经是未认证的 POST /api/event,域名由客户端选择。不是此遗留问题。
完整性受害者已拥有该类型时的 Repo.update!唯一约束 (site_id, type) 导致 500。默认安装没有该行,因此首次植入可行。
完整性攻击者站点的查看者AuthorizeSiteAccess 要求所有者/管理员/编辑者。查看者无法操作。
完整性OS shell、超级管理员 LiveView关闭。无 shell。

我并不声称能够进行 ClickHouse 转储、获取反向 shell,或以受害者身份登录仪表盘。转储是攻击者已经收到的邮件中的流量侦察信息:域名、实时访客、热门来源、热门页面。site_id 是整数主键(可枚举;whoareme 使用了 site_id=1)。仪表盘的 data-* 不会输出它。

我是如何发现的

whoareme Bug 02 教会了 Shield 和 Goal 停止转换 :site_id。我在 lib/ 下搜索了剩余的 cast(.*:site_id。流量变更通知仍然存在。Enable 会写入 assigns。Update 接受客户端映射。这就是遗留问题。

如果缺少 plausible-lab:d44e104ae3943a,run.sh 会克隆该固定版本,使用 DISABLE_REGISTRATION=false 启动 compose,以便两个独立的团队可以注册,播种 victim.lab(id 1 team 1)和 attacker.lab(id 2 team 2),在攻击者上启用 spike 通知,然后 PUT site_id=1。

已记录的弯路:SECRET_KEY_BASE 短于 64 字节(Plug.Session.COOKIE 拒绝它);在受害者路径域名上执行 PUT(404,那是关闭的相邻路径);将 enable 视为漏洞(enable 被正确分配)。纯属表演。

实验环境

python3 plausible-traffic-notify-Abraxas-Labs.py

或

cd lab
./run.sh

仅针对 http://127.0.0.1:18183。镜像 plausible-lab:d44e104ae3943a(MIX_ENV=ce,固定提交 d44e104ae3943a9240d5cb6b62e67dff0f069d3a)。需要 Docker。首次运行会克隆 https://github.com/plausible/analytics 到该 SHA 并构建镜像。启动器会 chdir 进入 lab/ 并执行 run.sh。

IOC victim.lab id=1 team=1 attacker.lab id=2 team=2
IOC attacker-not-member-of-victim=1
IOC put-victim-path http=404
IOC spike_notifications row 1 site_id 2 -> 1 recipients={[email protected]}
SUCCESS plausible-traffic-notify PLAUSIBLE-H03-TRAFFIC-NOTIFY-SITEID-WITNESS

见证字符串:PLAUSIBLE-H03-TRAFFIC-NOTIFY-SITEID-WITNESS。Oracle 是 spike_notifications.site_id 的迁移。Notifier 邮件侦察仍为推断。

修复

停止对 :site_id 进行类型转换。像 Shield 和 Goal 在 whoareme Bug 02 之后那样,从 conn.assigns 绑定 site.id。

def changeset(schema, attrs) do
  schema
  |> cast(attrs, [:recipients, :threshold, :type])
  |> validate_required([:recipients, :threshold, :type])
  |> validate_number(:threshold, greater_than_or_equal_to: 1)
  |> unique_constraint([:site_id, :type])
end

在 enable 中插入时保留来自 assigns 的 site_id。不要从 PUT 请求体中获取它。

针对已修补的构建重新运行 loopback 客户端:在使用外部 site_id 执行 PUT 后,该行必须仍保留在攻击者的 sites.id 上。受害者路径的 PUT 必须仍返回 404。

在此之前,不要将“我修补了 Shield 和 Goal”视为“所有属于 Site 的 changeset 都已停止强制转换 :site_id”。

参考资料

下载工具