목록으로
Amp
Blog2025.08.24

Amp

요약

️ 이 문서는 React Server Actions에서 발생할 수 있는 Remote Code Execution(RCE) 취약점의 구체적인 재현 사례를 설명합니다.
취약점은 서버 측에서 클라이언트로부터 전송된 직렬화된 함수 호출 데이터를 부적절하게 처리할 때 발생하며, 이는 임의 코드 실행으로 이어질 수 있습니다.
️ 따라서 React Server Actions를 사용하는 개발자는 잠재적인 보안 위험을 인지하고 입력 유효성 검사 및 안전한 데이터 처리 방안을 철저히 구현해야 합니다.

상세 내용

본 논문은 React Server Actions 기능에서 발견된 원격 코드 실행(RCE) 취약점을 상세히 분석하고 재현 사례를 제시합니다. React Server Actions는 클라이언트 컴포넌트가 서버 측 함수를 직접 호출할 수 있도록 하여 데이터 뮤테이션 및 폼 제출 로직을 간소화하는 React 18의 핵심 기능입니다. 이 기능은 클라이언트에서 서버로 데이터를 직렬화하고, 서버에서 이를 역직렬화하여 서버 액션을 실행하는 방식으로 동작합니다.

핵심 방법론은 React Server Actions의 내부 직렬화/역직렬화 메커니즘의 취약점을 악용하는 것입니다. 구체적으로, 공격자는 클라이언트에서 서버로 전송되는 페이로드에 악의적인 데이터 구조를 주입합니다. 이 데이터는 서버에서 역직렬화될 때, 의도치 않은 객체 인스턴스화 또는 특정 함수 호출을 유발하여 원격 코드 실행으로 이어지는 가젯 체인(gadget chain)을 트리거합니다.

기술적 상세 내용:

  • 직렬화/역직렬화 메커니즘 분석: React Server Actions는 Next.js App Router 환경에서 rscrsf 형식을 사용하여 클라이언트-서버 통신을 처리합니다. 이 과정에서 superjson 또는 자체 구현된 직렬화 로직과 유사하게, 특정 JavaScript 객체(예: Date, Map, Set, URL, Error 객체)뿐만 아니라 사용자 정의 객체 및 심지어 함수(function references)까지도 전송할 수 있는 능력이 중요한 취약점의 근간이 됩니다. 특히, ____FORM_ACTION과 같은 내부 마커가 포함된 데이터 구조가 서버에서 특별히 처리될 때, 역직렬화 과정에서 예상치 못한 부작용이 발생할 수 있습니다.
  • 취약점 발생 지점: RCE는 서버가 신뢰할 수 없는 입력을 역직렬화하는 과정에서 발생합니다. 공격자는 직렬화된 페이로드 내에 prototype pollution을 유도하거나, 특정 라이브러리의 취약한 constructor 또는 setter 메소드를 호출하도록 조작된 데이터를 삽입합니다.
  • * 가젯 체인 구성: 본 논문은 서버 환경에 존재하는 특정 라이브러리(예: postcss, css-what 또는 내부적으로 사용되는 url 파서 등)의 취약한 동작을 가젯(gadget)으로 활용합니다. 예를 들어, URL 객체가 역직렬화될 때, 특정 스키마(schema)나 호스트(host)를 가진 URL이 내부적으로 파싱되면서 특정 조건에 따라 eval 또는 child_process.exec와 같은 위험한 함수 호출로 이어지는 경로를 식별합니다.

    * 페이로드 예시: 공격 페이로드는 일반적으로 직렬화된 데이터 형식(예: JSON 또는 유사 바이너리 형식)으로 구성되며, 여기에는 서버 측의 특정 객체가 역직렬화될 때 악의적인 코드 실행을 유도하는 특수 속성 또는 값이 포함됩니다. 예를 들어, __proto__ 속성을 통해 Object.prototype을 오염시키거나, 특정 클래스의 인스턴스를 생성하면서 constructor 또는 valueOf 등의 메소드가 악의적으로 사용될 수 있도록 데이터를 구성합니다.

    예시 페이로드 구조:

    json{ "____FORM_ACTION": "...", "payload": { "__proto__": { "vulnerableProperty": { "constructor": { "prototype": { "exec": "require('child_process').execSync('rm -rf /')" } } } } } }

    이러한 페이로드는 서버 측에서 역직렬화될 때, vulnerableProperty가 접근되는 순간 exec 함수가 정의되고, 이후 다른 정상적인 코드 흐름에서 이 exec 함수가 호출되면 공격자의 코드가 실행되는 방식으로 동작합니다.

  • RCE 재현: 논문은 실제 Next.js 프로젝트에서 React Server Actions를 설정한 후, 위에서 설명한 직렬화된 악성 페이로드를 HTTP POST 요청을 통해 전송하여 서버 측에서 원격 코드가 성공적으로 실행됨을 입증합니다. 이는 파일 시스템 조작, 셸 명령어 실행 등 서버에 대한 완전한 제어권 획득을 포함합니다.
  • 결론적으로, 이 논문은 React Server Actions의 편리함 이면에 숨겨진 직렬화 취약점을 통해 발생할 수 있는 심각한 보안 위협(RCE)을 상세히 설명하며, 개발자와 보안 연구자들에게 이 기능의 안전한 사용과 검증의 중요성을 강조합니다.

    원본 보기
    Web
    Shared by Anonymous