阿里云ECS的实例元数据接口,服务器上随便一个程序都能访问吗?一个SSRF漏洞真会把钥匙交出去?

阿里云上云采购季 2核2G云服务器99元/年 续费同价

云服务器导航,点击直达:阿里云,腾讯云,京东云,百度云,UCloud

直接给结论:是的,实例元数据接口默认对机器内的所有程序开放,而且里面藏着 RAM 临时凭证这类高价值信息。如果你的网站带”抓取链接””上传在线图片”之类功能,一旦被 SSRF 钻空子,攻击者不用登录就能把凭证拿走。解决办法很简单:把元数据访问切到加固模式(必须先带 token 才能读),再收紧绑定的 RAM 角色。

一、元数据接口里到底藏了什么

阿里云 ECS 的元数据接口地址是 100.100.100.200,从服务器内部直接 curl 就能拿到实例 ID、镜像 ID、主机名,最关键的是 ram/security-credentials/角色名 这个路径——绑定了 RAM 角色的实例,从这里能直接取到云 API 的临时凭证。它只走内网、不出公网流量,所以平时存在感很低。

问题出在 SSRF:攻击者借你应用里的 URL 请求功能,让服务器自己去请求这个内网地址,返回内容拼进响应里,凭证就到手了。腾讯云 CVM 同样有元数据机制(地址 169.254.169.254),同样支持开启需要 token 的加固访问模式,两边思路一致。

二、怎么把口子收紧

  1. 开启元数据加固模式。在 ECS 控制台的实例详情里把访问模式切为加固模式,之后读取元数据必须先 PUT 换取一个带有效期的 token,普通 SSRF 拼个 GET 请求拿不到任何东西,这是最关键的一步。
  2. 清理 RAM 角色。没在用凭证的实例直接解绑;在用的角色按最小权限原则裁剪,别给 AccessKey 全量权限,凭证泄露时的爆炸半径会小很多。
  3. 应用层拦内网地址。凡是让服务器代为发起请求的功能,做目标地址校验:白名单域名、解析后拒绝内网网段(如 100.64.0.0/10、169.254.0.0/16),别让用户输入直接拼进请求 URL。

注意:

  • 切加固模式前先确认机器上的存量脚本:云监控插件、定时任务、自研运维脚本若直接读元数据,切完会立刻失效,先在测试实例上验证。
  • 加固模式挡的是”无脑 GET”,挡不住能在服务器上执行任意命令的攻击者——真被打穿,token 照样能取到,主机安全仍要靠补丁、密钥登录和最小权限兜底。
  • 元数据里的临时凭证会自动轮换,别把它写进代码或配置文件当永久密钥用。

总结:元数据接口是云平台的”便民服务”,但对能发请求的应用来说也是个隐秘的后门。开启加固模式加最小权限 RAM 角色,两步做完,绝大多数 SSRF 偷凭证的路子就堵死了;应用层再加一道内网地址校验,基本可以安心睡觉。

元数据访问模式对比

维度 普通模式 加固模式
读取方式 内网直接 GET 即可 先 PUT 换 token,再带 token 读取
SSRF 风险 高,易被借道偷凭证 大幅降低,常规 SSRF 失效
适用场景 无 Web 服务的纯内网机器 对外提供 HTTP 服务的实例建议一律开启

上表为通用经验判断,元数据接口能力与加固模式配置入口以阿里云官方文档为准;实例价格以官方活动页实时价格为准。

阿里云ECS服务器产品文档:参考-阿里云服务器ECS文档
腾讯云轻量服务器产品文档:参考-轻量应用服务器 文档中心

发表评论