@fastify/reply-from 경로 탐색 및 프록시 우회 취약점 (CVE-2026-117518)
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENT@fastify/reply-from 12.8.0 이하 버전을 사용하는 Node.js 애플리케이션
인증되지 않은 공격자가 백슬래시(\) 및 퍼센트 인코딩된 백슬래시(%5C)를 사용하여 경로 검증을 우회하고, 의도하지 않은 업스트림 내부 API 및 리소스에 접근하여 민감한 정보를 탈취할 수 있습니다
취약점이 해결된 @fastify/reply-from 12.8.1 이상 버전으로 즉시 업그레이드를 수행하십시오
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
패치 및 우회 명령어1. 공식 보안 패치 및 버전 업그레이드 명령어
본 취약점에 대한 유일한 해결책은 취약점이 수정된 최신 버전으로 패키지를 업그레이드하는 것입니다. 아래 명령어를 사용하여 @fastify/reply-from을 12.8.1 이상 버전으로 업데이트하십시오.
# npm을 사용하는 경우
npm install @fastify/reply-from@12.8.1
# yarn을 사용하는 경우
yarn add @fastify/reply-from@12.8.1
# pnpm을 사용하는 경우
pnpm add @fastify/reply-from@12.8.12. 패치 전 임시 완화(Workaround) 및 접근 제어 설정
공식 보안 권고에 따르면 업그레이드 외에 별도의 임시 완화책(Workaround)은 존재하지 않습니다. 패치 적용 전까지 임시로 유입되는 요청 경로에 백슬래시 및 인코딩된 백슬래시가 포함되어 있는지 검사하는 전역 미들웨어를 Fastify에 추가하여 차단할 수 있습니다.
// Fastify 애플리케이션에 임시 요청 필터링 미들웨어 적용
fastify.addHook('onRequest', async (request, reply) => {
const decodedUrl = decodeURIComponent(request.raw.url);
if (decodedUrl.includes('\\') || decodedUrl.includes('..')) {
reply.code(400).send({ error: 'Bad Request', message: 'Suspicious path traversal pattern detected.' });
}
});3. 침해 흔적(IoC) 및 로그·버전 점검 스크립트
현재 프로젝트 내에 취약한 버전이 설치되어 있는지 확인하고, 애플리케이션 액세스 로그에서 백슬래시(\) 또는 %5C를 포함한 비정상적인 경로 탐색 시도가 있었는지 점검하십시오.
# 1. 프로젝트 내 취약한 버전 설치 여부 확인
npm list @fastify/reply-from
# 2. 애플리케이션 액세스 로그에서 백슬래시(%5C 또는 \)를 포함한 경로 탐색 공격 시도 검색
grep -Ei '(%5C|\\|\.\.)' /var/log/nginx/access.log /var/log/apps/fastify-access.log내 GitHub/GitLab 레포지토리에 이 취약한 패키지가 숨어 있는지 30초 만에 스캔하세요
간접 의존성(Transitive Dependency)에 포함된 취약점은 수동 확인이 불가능합니다. Git 연동 한 번으로 취약 버전 탐지부터 호환성을 유지하는 최소 버전 업그레이드 PR까지 자동 생성하세요.
취약점 발생 원리 및 공격 메커니즘
1. 취약점 개요 및 발생 원인 (Root Cause)
본 취약점(CVE-2026-117518)은 Fastify 웹 프레임워크의 HTTP 요청 포워딩 플러그인인 @fastify/reply-from에서 발생하는 경로 탐색(Path Traversal, CWE-22) 및 프록시 우회 취약점입니다.
기존 12.8.0 이하 버전에서는 프록시 경로를 검증할 때 슬래시 기반의 도트 세그먼트(예: /../)만을 검사하여 필터링을 수행했습니다. 그러나 이후 대상 URL을 빌드하는 과정에서 WHATWG URL 파서(Parser)를 사용하는데, 이 파서는 http, https, ws, wss 스키마에서 백슬래시(\) 및 퍼센트 인코딩된 백슬래시(%5C)를 슬래시(/)로 정규화(Normalization)하여 처리합니다. 이로 인해 검증 단계에서는 필터링을 우회하고, 최종 URL 해석 단계에서 상위 경로로 이동하는 불일치(Parser Differential) 현상이 발생합니다.
2. 공격 메커니즘 및 익스플로잇 시나리오
공격자는 프록시 경로 검증 로직을 우회하기 위해 슬래시 대신 백슬래시를 포함한 도트 세그먼트 패턴(예: ..\..\ 또는 ..%5C..%5C)을 요청 경로에 주입합니다.
- 요청 수신: 공격자가
https://example.com/api/v1/proxy/..%5C..%5Cadmin과 같은 경로로 요청을 전송합니다. - 검증 우회:
@fastify/reply-from은 슬래시(/) 기준의 도트 세그먼트만 검사하므로, 백슬래시가 포함된 해당 경로를 안전한 것으로 판단하고 통과시킵니다. - URL 정규화 및 해석: WHATWG URL 파서가 타겟 업스트림 URL을 생성하는 과정에서
..%5C를../로 변환합니다. - 업스트림 요청 전송: 결과적으로 프록시는 의도된 접두사(Prefix) 경로를 벗어나 업스트림 서버의 내부 관리자 엔드포인트(
/admin)로 요청을 전달하게 됩니다.
3. 비즈니스 및 인프라 파급 영향
이 취약점은 주로 기밀성(Confidentiality)에 높은 영향을 미치며, 무결성(Integrity)에도 일부 영향을 미칠 수 있습니다.
- 내부 API 노출: 외부 인터넷에 노출되지 않아야 할 내부 마이크로서비스(Upstream Services) 및 관리 API가 인증 없이 외부에 노출될 수 있습니다.
- 보안 통제 무력화: 프록시 호출 전단계에 배치된 라우트 가드(Route Guards)나 인증/인가 미들웨어가 특정 경로 패턴을 기준으로 작동하는 경우, 공격자가 이 검증을 우회하여 내부 자원에 접근할 수 있습니다.
공식 보안 권고문 및 참조 링크
@fastify/reply-from is a Fastify plugin that forwards requests to an upstream HTTP server. In versions up to and including 12.8.0, the plugin validated proxy paths against forward-slash dot-segments only and then built the target with the WHATWG URL parser, which normalizes a backslash and its percent-encoded form to a forward slash on the http, https, ws, and wss schemes. A path that uses backslash dot-segments therefore bypasses the traversal check and resolves to a different upstream path, so an application that scopes proxying to an upstream prefix, or relies on route guards in front of the forwarding call, can have an unauthenticated request escape the intended prefix and reach other upstream endpoints. The resulting access to unintended upstream resources is primarily a confidentiality impact with limited integrity impact. The issue is fixed in @fastify/reply-from 12.8.1, where the path is normalized and any segment resolving to a single or double dot, along with control characters and ambiguous whitespace, is rejected before the URL is constructed, and users should upgrade to 12.8.1 or later. There is no workaround other than upgrading.
자주 묻는 실무 질문 (FAQ — CVE-2026-117518)
FAQQ1. CVE-2026-117518 취약점의 위험도와 실제 악용 가능성은 어느 정도입니까?
CVE-2026-117518의 기본 점수는 CVSS 8.2 (HIGH)이며, 향후 30일 내 실제 악용 확률을 나타내는 EPSS 점수는 0.5%입니다. 외부 네트워크 노출 여부에 따라 선제적인 패치 및 접근 제어가 권장됩니다.
Q2. CVE-2026-117518에 영향을 받는 벤더와 제품은 무엇입니까?
주요 영향 벤더는 fastify이며, 대상 컴포넌트는 @fastify/reply-from입니다. 상세 영향 범위: @fastify/reply-from 12.8.0 및 그 이하의 모든 버전
Q3. 서버 재기동이나 정규 패치 전 즉시 적용할 수 있는 완화 조치(Workaround)는 무엇입니까?
[권장 조치] 취약점이 해결된 @fastify/reply-from 12.8.1 이상 버전으로 즉시 업그레이드를 수행하십시오 본문의 패치 및 우회 명령어 섹션과 자가 점검 체크리스트를 참고하여 외부 노출 포트를 차단하거나 WAF 탐지 규칙을 선적용하십시오.
CVE-2026-117518 사내 보안 패치 공지문 · CISO 경영진 보고서 초안 자동 생성
클릭 한 번으로 사내 이메일·노션·결재 문서에 바로 붙여넣을 수 있는 공식 보고서 양식을 생성합니다.
🔗 함께 점검해야 할 동일 벤더·스택 연관 취약점 (fastify)
동일 카테고리 전체 보기 →@fastify/multipart 파일 업로드 스트림 처리 미흡으로 인한 서비스 거부(DoS) 취약점 (CVE-2026-117531)
[영향 대상] @fastify/multipart 5.3.0 이상 10.1.6 이하 버전을 사용하는 Fastify 웹 애플리케이션
@fastify/secure-session 서명 검증 우회 및 세션 무효화 우회 취약점 (CVE-2026-117549)
[영향 대상] @fastify/secure-session 7.5.0 이상 8.4.1 이하 버전을 사용하며, 서명된 쿠키(signed cookie) 옵션을 활성화한 Node.js 애플리케이션
GitLab CE/EE 미인증 임의 파일 읽기 취약점 보안 권고 (CVE-2026-85706)
[영향 대상] GitLab CE/EE 18.7 버전부터 19.3.1 버전 사이의 특정 릴리즈 사용자
JFrog Artifactory 경로 이탈 취약점(CVE-2026-66384) 보안 권고: 원격 저장소 Docker 캐시 경로 임의 파일 쓰기
[영향 대상] 특정 원격 저장소(Remote Repository) 설정이 활성화된 JFrog Artifactory 자가 관리형(Self-Managed) 인스턴스
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.