周三下午,一个安全研究员盯着屏幕上的Python库文档,发现了三个能穿透内网的漏洞。这个库叫Crawlee,Apify维护的爬虫框架,从个人项目到多租户SaaS都在用——监控着数百个客户的网站数据。不是什么边缘工具,是基础设施级别的存在。
三个漏洞按利用难度和危害分层。第一案:curl-impersonate模式下,把gopher://、dict://、ftp://这些协议藏进sitemap,就能对内网服务发起盲打。第二案:按官方文档推荐写法,存在一处能完整外泄数据的curl调用点。第三案:覆盖全部三个HTTP后端的SSRF,HTTP协议层面的内网穿透。
打开网易新闻 查看精彩图片
关键前提是CurlImpersonateHttpClient。Crawlee有三个HTTP后端:httpx和impit只认http/https,传gopher直接报错,底层库就不支持。但curl-impersonate基于curl-cffi,继承了curl的协议宽容性——这才是攻击面敞开的根源。
历史上有过用HTTP封装调用TCP服务的绕过手法,所以"设计上允许访问私有地址"这种辩解站不住脚。如果真是设计如此,文档得每页用粗体红字标明"禁止生产环境使用"。实际上直到不久前,这个库连URL scheme验证都没有,老issue里提过这事。
现在的"验证"更像个摆设:只在Request.from_url这一个函数里存在,其他所有收URL的地方都是裸字符串直传给HTTP客户端。这个模式贯穿全库,也是后续所有问题的根因。
热门跟贴