周口市网站建设_网站建设公司_Django_seo优化
2025/12/24 11:07:29
网站建设
项目流程
发生原因
- React19 React Server Components / Flight 协议层出现的“反序列化/解析逻辑缺陷”
- 向"React Server Function / Server Action"发送请求, React 在服务端进行解码/序列化该 payload 时校验不足, 产生原型污染, 最终远程代码执行(RCE)
- Next.js(App Router)深度依赖 RSC / Flight 协议 以及 Server Action 相关机制. 即使没有显示的写
Server Action, 只要应用可以 RSC, 也会受影响
- 一旦原型污染, NodeJS 进程里就能执行任意的远程代码.
影响的面/处置/监控
- 我们的项目使用 Page Router 就没关系
- 所有线上服务进行了升级
- 查看有无异常 POST, 爆发式的扫描, 容器内的异常进程等
问题
什么是 RSC / Flight 协议
- 页面和服务之间的通信的内容, 本来应该是 json 数据, 或者是 html, 但因为服务端渲染变成了一种其他的协议, 就是 flight 协议, 可以进行转换
什么是反序列化解析
- 就是拿到 flight 协议的内容, 然后进行格式化, 然后再交给服务端的函数执行
React Server Function / Server Action 是什么
- 服务端的函数, Server Action 就代表能再服务端执行的组件
解码序列化是什么?
payload 又是什么?
- 一次请求里真正承载数据和指令的内容
- 本来应该是一些 json, 表单, multipart, 二进制等
- 在 nextjs 的 app router 中是 flight 这种协议
什么是原型污染 prototype pollution?
- 因为过来的 flight 会被格式化, 然后在服务端运行
- 如果这个时候, 直接修改了某个对象的
__proto__, 就相当于修改了Object['prototype']
- 此时, 再有对象获取某个属性的时候, 就能获取到, 或者是判断到. 例如
a['__proto__']['name'] = 'zhangrh' 那么 b['name']就等于 zhangrh
- 这就是原型污染
为什么原型污染能够 RCE
- 绕过 Action 的白名单
- Server Action 的边界是: 客户端只能调用服务端明确暴露/允许的函数
- 如果校验被污染, 就可能走到没有暴露的方法中.
- 如果框架里存在强能力 action/内部 handler, 就变得危险
- 走到了动态解释/动态加载的点(sink)
- 动态加载某个模块/插件
- 动态解析某种表达式/模版
- 调用一个按名字分发的 handler
- 这些能力本来是正常的, 但是输入过程能操作流程和参数, 就有可能造成执行任意代码
- RCE 的本质: 把控制权一路传递到了某个能执行代码或者系统能力的 sink
具体的执行过程
- 原型污染: 所有的表单字段都加了一个mode='admin'
- gadget: 系统某处写了 if(from.mode== 'admin' ) {}走管理员流程
- sink: 管理员能维护所有的可执行脚本
- 结果: 本来没有执行脚本, 但现在流程走到了可执行脚本地方. 然后执行了远程代码
攻击者如何知道哪些流程代码分支能走到脚本执行的地方
- 开源框架 / 依赖包
- 攻击者对比修复前后的diff, 针对旧版本
- fuzzing模糊撞击
- 不断生成各种输入
- 观察结果
- 摸到可执行分支
- 根据输入找到触发条件
- 利用泄露的信息进行推断
- 不一定执行脚本, 也可能是强力代码分支
什么是强力代码分支
- 强力分支自带执行点
- 动态模块/组件/处理器解析, 例如执行一个函数
fn(...), 然后这个时候, 自己创建一个函数名, 就能执行代码了
- 动态加载某段实现,插件/适配器/解析器
- 访问文件系统/网络/进程
- 作为RCE的垫脚石
- 第一步: 推入某个分支拿到信息泄漏(版本, 路径,内部结构,错误栈)
- 第二步: 利用这些信息更精确的构造输入,碰撞执行下一个gadget
- 第三步: 最终落到sink(RCE/任意文件读写/SSRF)
- 除了RCE外, 强力分支带来高价值后果
- 未授权调用内容action/越权操作
- 任意文件读取(密钥,配置,源码片段)
- SSRF(server-side-request-forgery), 请求内网,内部地址,或者内部的接口
- DoS, 卡死服务
- 绕过安全网关/校验, 系统进入debug/unsafe模式
控制机器挖矿
- RCE/命令执行 -> 下载脚本开始挖矿
- 拿到云凭证(配置, SSRF) -> 使用账号开新的机器进行挖矿
- 拿到内网权限 -> 感染更多机器进行挖矿