2025年十大Web黑客技术征集提名
在过去的几年中,安全研究人员通过博客文章、演讲和白皮书与社区分享了海量成果。这固然是好事,但也意味着那些真正可复用的技术可能被埋没,甚至那些耀眼的研究成果最终也会在大家追逐下一个新热点时黯然失色。
自2006年起,社区每年都会聚集起来,将这股信息洪流转化为两种有用的资源:
- 一份经过简单整理的、关于过去一年值得关注的Web安全研究的清单。
- 一份聚焦于最具价值、必读研究成果的十大榜单。
如果你想深入研究过去的提名者和获胜者,或了解该项目的更多历史,请查看完整的项目档案。否则,请继续阅读,了解如何为2025年的榜单提名。
今年,我们将遵循以下时间线:
- 1月6日至13日:收集社区对2024年度顶级研究的提名。
- 1月14日至21日:社区对提名进行投票,以产生前15名的入围名单。
- 1月22日:启动专家小组对入围名单的投票,以选定并排序最终的10名。
- 2月3日:发布《2025年十大Web黑客技术》!
我应该提名什么?
我们的目标是突出那些包含新颖、实用技术,并且可以重新应用于不同系统的研究。像Log4Shell这样的单个漏洞在当时很有价值,但通常时效性较差,而像JNDI注入这样的底层技术则可以重复应用并产生巨大效果。提名也可以是针对已知攻击类别的改进,例如《利用本地DTD文件利用XXE》。更多示例,你可以查看往年十大榜单作为参考。
如何提名
要提交提名,只需提供研究成果的URL,以及一个可选的简短评论,解释该工作的新颖之处。你可以进行任意多次提名,如果你认为自己的工作值得,也可以提名自己的研究!
请注意,为了控制社区投票选项的数量,我将过滤掉那些非Web领域的、仅仅介绍工具的或创新性不明确的提名。我们不会收集电子邮件地址——如果想在投票阶段开始时获得通知,请在X、LinkedIn或BlueSky上关注 @PortSwiggerRes。
加入社区
我们很乐意听取您的意见!如果您有任何问题,或者想讨论今年的研究成果,请加入PortSwigger Discord的 #research 频道。
提名列表 - 最后更新于 2026-01-09
我自己已经做了一些提名来启动这个过程,并且我会每隔几天用新的社区提名更新这个列表。我为每个条目附上了AI辅助生成的摘要。
-
Eclipse on Next.js: Conditioned exploitation of an intended race-condition 通过强制使不同的失败请求在共享的错误缓存键上发生碰撞,来竞速Next.js的响应缓存批处理器,从而泄露一个瞬态的
pagePropsHTML变体,然后可以将其外部缓存,用于投毒至存储型XSS(尽管之前已有修复)。 -
Next.js, cache, and chains: the stale elixir 将可伪造的框架内部头与Next.js数据请求机制链式结合,强制将SSR JSON缓存为HTML,从而通过过时重新验证(stale-while-revalidate)实现缓存投毒拒绝服务和存储型XSS。
-
Unexpected security footguns in Go’s parsers 将Go对JSON键的大小写不敏感匹配、重复键的“最后获胜”原则,以及XML对前导/尾随垃圾内容的容忍度链式结合,制作跨格式的多态输入,使得不同的服务/解析器产生不同解释,从而实现授权/认证绕过。
-
HTTP/1.1 must die: the desync endgame 利用Expect处理特性和早期响应小工具,将0.CL死锁转变为可靠的双重异步请求走私,从而实现响应队列投毒和跨租户缓存/内容劫持。
-
Under the Beamer 将Chromium的HTMLCollection DOM破坏与库驱动的节点移除小工具链式结合,在运行时使转义函数失效,然后转向
innerHTMLiframe属性注入点,以绕过DOMPurify并获得XSS。 -
Opossum Attack 通过中间人攻击将受害者的隐式TLS连接切换到机会性TLS升级端点,实现跨协议应用层异步,注入握手前消息,并永久错配请求/响应流。
-
The Fragile Lock: Novel Bypasses For SAML Authentication 空值规范化:强制规范化过程出错,使得签名摘要代码将已签名数据视为空,再结合解析器的命名空间/属性不一致性,使签名验证和断言处理产生分歧,从而实现完整的SAML认证绕过。
-
Funky chunks: abusing ambiguous chunk line terminators for request smuggling 在被忽略的块扩展内部和超大块溢出中,滥用分块体行终止符的模糊性,创建新的请求走私差异(包括新识别的EXT.TERM和基于溢出的变体),而不依赖于Content-Length与Transfer-Encoding的混淆。
-
Funky chunks – addendum: a few more dirty tricks 利用两个字节的块体终止符过度读取和模糊的尾部换行处理(包括由早期响应小工具启用的请求合并),通过分块解析差异开发新的HTTP请求走私原语。
-
Cross-Site WebSocket Hijacking Exploitation in 2025 通过WebSocket可访问的GraphQL利用跨站WebSocket劫持,以绕过预检保护的CSRF防护,并展示私有网络访问不适用于WebSocket,因此跨源WebSocket仍可访问私有IP服务。
-
SVG Filters - Clickjacking 2.0 滥用跨源iframe上的SVG过滤器管道来读取选定像素,并实现逻辑门控、多步骤的交互式点击劫持,通过完全在过滤器内部生成的、由用户扫描的二维码进行数据泄露。
-
Nonce CSP bypass using Disk Cache 通过强制bfcache回退到磁盘缓存来重用泄露的CSP nonce(通过CSS泄露),同时通过缓存键操作仅重新缓存可注入的获取内容,从而绕过基于nonce的CSP。
-
Novel SSRF Technique Involving HTTP Redirect Loops 利用重定向循环状态码变化(循环不常见的3xx响应)来触发应用程序错误状态,从而泄露完整的SSRF重定向链和最终的200响应。
-
Lost in Translation: Exploiting Unicode Normalization 利用Unicode规范化不匹配(虚拟混淆字符/最佳拟合映射以及截断/溢出边缘情况)来绕过验证,并将良性输入转变为恶意行为。
-
SOAPwn: Pwning .NET Framework Applications Through HTTP Client Proxies And WSDL 滥用从攻击者提供的WSDL生成.NET SOAP代理的过程,设置非HTTP方案,将SOAP调用转变为任意文件写入(和NTLM中继),最终实现webshell/脚本投放RCE。
-
Forcing Quirks Mode with PHP Warnings + CSS Exfiltration without Network Requests 通过早期PHP警告触发怪异模式以放宽同源样式表MIME检查,然后使用404反射文本作为CSS接收器,并结合基于
:valid的正则匹配和帧计数作为无请求预言机,在CSP下泄露秘密。 -
ORM Leaking More Than You Joined For 滥用Beego的过滤器表达式段覆盖特性,将不允许的字段走私通过部分验证;以及通过类型混淆绕过Prisma认证,该混淆通过通用请求解析器将用户输入强制转换为操作符对象。
-
Parser Differentials: When Interpretation Becomes a Vulnerability 利用解析器差异——组件对同一输入的解释方式不匹配——将看似良性的数据转变为安全绕过。
-
DOM-based Extension Clickjacking: Your Password Manager Data at Risk 基于DOM的扩展点击劫持,隐藏并重新定位注入到页面DOM中的密码管理器自动填充UI,使得一次被诱导的点击即可触发秘密自动填充到攻击者控制的字段中,从而泄露数据。
-
XSS-Leak: Leaking Cross-Origin Redirects 利用Chromium连接池耗尽加上确定性的主机排序作为时间预言机,来推断跨源fetch和重定向目标(包括子域),无需注入。
-
Google Cloud Account Takeover via URL Parsing Confusion | by Mohamed Benchikh 利用IPv6特定的多“@”用户信息解析差异(在OAuth重定向验证器和浏览器之间),绕过仅允许环回地址的允许列表,并泄露授权代码以进行账户接管。
-
How I Accessed 1,800 Company Livestreams and Uncovered a New Web Exploit Class: RRE | by Farzan Karimi 将未经认证的上游元数据API链式结合,递归重建一个权限工作流以访问受保护的媒体流,并通过基于熵的首个敏感引用发现进行引导。
-
Exploiting The Not So Misuse-Resistant Authenticated Encryption API of OpenSSL 滥用OpenSSL绑定中的AEAD标签长度截断来暴力破解短标签,然后利用由此产生的nonce重用条件来恢复GHASH/Poly1305子密钥,并通过格式有效性预言机伪造/解密任意密文。
-
Permission Hijacking at Scale 通过账户接管到小部件代码注入链(XSS/HTML注入加CSP绕过),劫持广泛嵌入的支持小部件,以大规模继承并利用被委派的浏览器权限。
-
Playing with HTTP/2 CONNECT 利用HTTP/2 CONNECT流多路复用,将配置错误的前向代理转变为通过单个连接进行的高吞吐量内部端口扫描器,可能规避无法检查每个流隧道的监控。
-
Stopping Redirects 滥用浏览器导航阻止特性(URL/协议限制、诱导的错误页面加导航API历史记录泄露、通过快速同站点导航进行重定向限制,以及无allow-forms的沙盒化以抑制自动提交的表单重定向),在OAuth回调码被消耗之前保持其可读。
-
ASP.NET MVC View Engine Search Patterns 通过路径遍历实现任意文件写入,并与ASP.NET MVC视图解析链式结合,通过调用路由操作(无扩展名)获得Razor执行,从而使视图引擎加载并编译植入的视图文件,尽管IIS有扩展名白名单。
-
Bypassing CSP with New Relic Custom Events 滥用严格的
connect-src允许列表,通过将包含身份验证令牌的POST重定向到New Relic,然后通过NRQL错误日志采样泄露JSON主体;这得益于URL解析/身份验证差异,该差异将路径中嵌入的密钥材料视为有效。 -
CRLF Injection Nested Response Splitting CSP Gadget 将CRLF响应分割链式结合到同源脚本加载中,该脚本本身执行第二次响应分割以发出截断的JavaScript,通过Content-Length/Transfer-Encoding操作(“嵌套响应分割”)绕过严格的CSP。
-
CVE-2025-1974: The IngressNightmare in Kubernetes 将未经认证的准入Webhook NGINX配置注入,与滥用客户端主体缓冲加ProcFS文件描述符重用链式结合,在配置测试期间通过一个模糊的指令加载容器内的瞬态共享库,以实现RCE。
-
ReDisclosure: New technique for exploiting Full-Text Search in MySQL (myBB case study) 通过滥用MySQL全文布尔运算符解析和早期退出长度检查来绕过搜索词清理,将结果与错误重定向转变为盲注预言机,用于枚举原本隐藏的线程标题。
-
Python Dirty Arbitrary File Write to RCE via Writing Shared Object Files Or Overwriting Bytecode Files 通过覆盖有效的
.pyc头文件来加载注入的字节码(无需重启),或者更强大地通过删除一个编译的扩展模块(导入解析器优先于.py/.pyc)来实现Python RCE,可选地通过进程重新加载触发器强制重新导入。 -
SharePoint ToolShell – One Request PreAuth RCE chain CVE-2025-53770 将基于引用者的认证绕过、初始化阶段的ToolPane调用和通用包装器类型混淆链式结合,以击败DataSetSurrogateSelector的允许列表,然后通过模板化安全控件访问TemplateParser以触发反序列化小工具,实现单请求预认证RCE。
-
Prompt Injection Inside GitHub Actions: The New Frontier of Supply Chain Attacks
-
Attacks via a New OAuth flow, Authorization Code Injection, and Whether HttpOnly, PKCE, and BFF Can Help 利用同源脚本执行窃取并重放OAuth授权响应,同时通过“破坏”重定向流程(例如,通过响应模式切换/窗口中断)执行授权码注入,通过跨域获取服务器设置的预认证cookie来绕过BFF和PKCE。
-
Blind trust: what is hidden behind the process of creating your PDF file? 通过URL解码/双重编码特性绕过PDF渲染器路径遍历缓解措施,并利用PDF生成资源加载器触发phar流包装器反序列化和“安全钩子运行过晚”SSRF。
-
Impossible XXE in PHP 将libxml2参数实体扩展特性与PHP流包装器和过滤器链链式结合,以绕过nonet/双重解析/doctype检查,通过
data:内联压缩的DTD,并通过DNS泄露文件。 -
Blind SSTI 利用反射的运行时错误来泄露代码/模板评估输出,并使用条件错误触发作为布尔盲注预言机,用于无需时间延迟的代码注入和SSTI。
-
Disguises Zip Past Path Traversal Zip Slip攻击的回归!
-
Hacking Gemini: A Multi-Layered Approach 将Markdown/HTML链接转换和跨产品导出层链式结合,将经过清理的链接转换为图像并逃避URL重写,通过间接提示注入实现零点击/单点击Workspace数据泄露。
-
Make XXE Attacks Brilliant Again !!! 当JDK FTP/HTTP带外通道被换行符清理时,利用Windows UNC路径(通过
file/netdoc处理器)通过SMB泄露多行XXE数据。 -
Cross-Site ETag Length Leak 将跨站点ETag长度变化与431引发的导航失败链式结合,并通过Chromium历史记录替换来检测,以构建XS-Leak预言机。
-
Make Self-XSS Great Again 滥用无凭证iframe的同源访问加上登录CSRF/点击劫持,将存储的自XSS转变为存储型XSS,并使用fetchLater的延迟请求在标签页关闭后(绕过框架限制)稍后执行已认证的操作。
-
Vega CVE-2025-59840 - Unusual XSS Technique toString gadget chains | Critical Thinking 滥用隐式的
toString强制转换来调用全局的this.foo(this.bar)小工具链,将表达式沙箱成员访问转向eval以实现DOM XSS,并指出一种通过valueOf式强制转换实现无参数函数调用WAF绕过的变体。 -
Fontleak: exfiltrating text using CSS and Ligatures 滥用仅CSS注入,结合精心设计的连字字体和容器查询,将每个字符的字形宽度差异转变为条件性网络请求,再加上特定浏览器的导入/字体链接来迭代索引并泄露长文本(包括内联脚本秘密),即使在常见的清理程序下也能实现。