CVE-2021-47715CVE-2021-47715是Hasura GraphQL Engine 1.3.3版本中存在的一个服务器端请求伪造(Server-Side Request Forgery,SSRF)漏洞。该漏洞源于add_remote_schema端点对用户提供的远程模式URL缺乏充分的验证和过滤。攻击者可以通过向/v1/query端点发送精心构造的POST请求,在URL定义中注入恶意的远程服务器地址,从而迫使GraphQL引擎向攻击者指定的任意URL发起请求。
利用此漏洞,攻击者可以扫描和访问内部网络资源,包括内部服务、数据库、API接口等敏感系统组件。由于漏洞利用无需认证,攻击者可以在未登录的情况下直接发起攻击,大大降低了利用门槛。此外,攻击者还可以利用Hasura服务器作为代理,对内部网络中的其他服务发起进一步攻击,实现内网横移。
该漏洞的危险性在于它能够绕过网络边界防护,将Hasura服务器转化为攻击内网的跳板。攻击者不仅可以读取服务器响应内容,还可能通过精心设计的请求触发进一步的安全问题。鉴于Hasura GraphQL在现代微服务架构中的广泛应用,此漏洞可能影响大量使用该产品的企业级应用。
Hasura GraphQL Engine的/v1/query API端点提供了add_remote_schema功能,允许用户动态添加远程GraphQL模式。在处理远程模式URL时,系统会向指定的URL发起HTTP请求以获取模式定义。然而,该功能在实现时存在以下安全问题:
1. **URL验证缺失**:系统未对用户提供的远程URL进行严格的域名或IP验证,允许攻击者指定任意URL,包括内网IP地址(如192.168.x.x、10.x.x.x)和localhost。
2. **请求处理流程**:攻击者发送的恶意请求格式如下:POST /v1/query,包含JSON payload,其中定义了带有恶意URL的远程模式配置。服务器在处理该请求时,会直接使用攻击者提供的URL发起HTTP GET请求。
3. **响应处理**:服务器将获取的响应内容用于后续的模式解析和合并操作。攻击者可以通过搭建恶意服务器返回精心构造的响应,实现对服务器行为的进一步控制。
4. **利用场景**:攻击者可以利用此漏洞访问云元数据服务(如AWS 169.254.169.254)、内部管理接口、数据库连接等敏感资源。