黑客不打烊+主题大赛 · 第 11 期

凌晨两点十七分,他把一个 OAuth 回调打成了开放重定向。

这是这周的主题赛里我最想留下来的一份提交。不是因为难,是因为他写了八百多字的复现步骤,没一句废话。

陈默 2026-09-10 阅读约 9 分钟

昨天凌晨两点十七分,我还在改这周的赛题审核表。

屏幕右下角弹出一封提交邮件,标题就一行字:「回调白名单绕过,可重定向到任意域,附 PoC」。发件人叫林知远,ID 是 lzy_0x07,提交编号 #1108。我点开,正文八百三十七个字,三张截图,一段 curl 命令,末尾一行:「影响面:登录态可被钓走,建议优先修。」

我看了两遍。

深夜桌面上亮着的笔记本屏幕
凌晨的桌面。这张图我用了三年,一直没换。

事情本身不复杂。某站的 OAuth 回调白名单只校验了域名后缀,没校验路径。攻击者可以把 redirect_uri 写成 https://trusted.example.com.evil.test/cb,白名单用 endsWith 判断,直接放过。这是个老掉牙的漏洞类型,2019 年我在三个不同项目里见过一模一样的写法。但林知远做了一件大部分人不会做的事:他先写了三行说明为什么这不算误报,再写复现步骤,最后才贴 PoC。

顺序很重要。

百分之九十的提交,是把 PoC 甩在最前面,然后让我自己去猜他想说什么。

我不是在抱怨新人。我自己第一次提交漏洞报告的时候,正文只有一句话:「这里有个 XSS,你看一下」。被当时的负责人退回来三次,第三次他才回我一句:「你先告诉我,谁会被打,怎么被打,打完之后能干什么。」那句话我记了七年。所以现在看到林知远这种写法,我有点想笑,又有点想骂人——骂那些把「写清楚」当成可选项的人。

这周的主题赛一共收到 47 份提交。有效 31 份。剩下的 16 份里,有 9 份是扫描器跑出来的原始报告,连个标题都没改;有 4 份是同一个漏洞换了四个路径提交;还有 3 份,PDF 里只有一张截图和一个「please fix」。

我不生气这些提交不专业。我生气的是,他们连自己写的东西都不愿意读第二遍。

屏幕上密集的代码
扫描器能生成报告,但生成不了判断。

说到判断。上个月有个提交,直接抄了 2024 年某公开漏洞库里的分析,连原文里的一个错别字都原样保留。作者叫周牧野,我在审核群里把两份文本并排贴出来,他回了一句:「我是参考了一下,不算抄吧。」我没回复。直接把这条标记为无效,理由写了六个字:没有自己的判断。

这句话我后来在群里又说了一遍。有人退群了。

回到这周的赛题。主题是「认证与授权边界」,我出题的时候故意留了一个坑:默认的 session 过期时间是 7200 秒,但刷新 token 的接口没做频率限制。这不是什么高明设计,就是想看有没有人愿意在「功能正常」的地方多停一秒。47 份提交里,只有 6 个人提到了刷新接口。林知远是其中之一,他在报告末尾加了一句话:「这个不算漏洞,算是设计债,但你出的题,我就顺手记一下。」

我给他回了邮件。两个字:收到。

接下来这周的主题赛,我打算把赛题往「供应链」方向挪一点。最近在折腾的一个小工具,用到了 高通骁龙6 gen5 平台上的一个调试接口,顺手翻了一遍相关依赖,发现自己两年前写的一段代码还在被某个内部服务引用。那种感觉很怪——你以为是别人在维护,其实一直是你自己在原地打转。

顺便说一句,这周的赛题页面挂了三天,访问量只有 213 次。其中 78 次来自我自己。我认了。

写到这里,窗外天已经亮了。我把林知远那份提交归档,标记为「本期最佳」,然后在审核表里给另外 15 份写了同样的备注:请补一句话,说明这个漏洞被利用之后,谁会损失什么。

我不知道有几个人会真的去补。但我会等。

这周留下的链接

按时间倒序。每一条我都点开过。

关于我

我叫陈默。白天在乙方做安全评估,晚上维护「黑客不打烊+主题大赛」。

这个站是我 2023 年搭的,一开始只是想给自己留个地方放漏洞复盘。后来有人来投稿,再后来有人问能不能出题,就变成了现在这样——每周一期主题,我出题、审稿、写总结,全部一个人做。

我坚持每一份提交都要有人读第二遍。难的不是技术,是让提交的人知道:你的报告是写给一个人看的,不是写给一个队列看的。

这个站不接广、不排名、不发奖。唯一的标准是:写清楚谁会被打,怎么被打,打完之后能干什么。

“你先告诉我,谁会被打,怎么被打,打完之后能干什么。”
—— 2019 年,一位项目负责人退我第三次漏洞报告时说的话。名字我忘了,这句话没忘。