Amp
요약
상세 내용
핵심 방법론은 React Server Actions의 내부 직렬화/역직렬화 메커니즘의 취약점을 악용하는 것입니다. 구체적으로, 공격자는 클라이언트에서 서버로 전송되는 페이로드에 악의적인 데이터 구조를 주입합니다. 이 데이터는 서버에서 역직렬화될 때, 의도치 않은 객체 인스턴스화 또는 특정 함수 호출을 유발하여 원격 코드 실행으로 이어지는 가젯 체인(gadget chain)을 트리거합니다.
기술적 상세 내용:
rsc 및 rsf 형식을 사용하여 클라이언트-서버 통신을 처리합니다. 이 과정에서 superjson 또는 자체 구현된 직렬화 로직과 유사하게, 특정 JavaScript 객체(예: Date, Map, Set, URL, Error 객체)뿐만 아니라 사용자 정의 객체 및 심지어 함수(function references)까지도 전송할 수 있는 능력이 중요한 취약점의 근간이 됩니다. 특히, ____FORM_ACTION과 같은 내부 마커가 포함된 데이터 구조가 서버에서 특별히 처리될 때, 역직렬화 과정에서 예상치 못한 부작용이 발생할 수 있습니다.prototype pollution을 유도하거나, 특정 라이브러리의 취약한 constructor 또는 setter 메소드를 호출하도록 조작된 데이터를 삽입합니다. * 가젯 체인 구성: 본 논문은 서버 환경에 존재하는 특정 라이브러리(예: postcss, css-what 또는 내부적으로 사용되는 url 파서 등)의 취약한 동작을 가젯(gadget)으로 활용합니다. 예를 들어, URL 객체가 역직렬화될 때, 특정 스키마(schema)나 호스트(host)를 가진 URL이 내부적으로 파싱되면서 특정 조건에 따라 eval 또는 child_process.exec와 같은 위험한 함수 호출로 이어지는 경로를 식별합니다.
* 페이로드 예시: 공격 페이로드는 일반적으로 직렬화된 데이터 형식(예: JSON 또는 유사 바이너리 형식)으로 구성되며, 여기에는 서버 측의 특정 객체가 역직렬화될 때 악의적인 코드 실행을 유도하는 특수 속성 또는 값이 포함됩니다. 예를 들어, __proto__ 속성을 통해 Object.prototype을 오염시키거나, 특정 클래스의 인스턴스를 생성하면서 constructor 또는 valueOf 등의 메소드가 악의적으로 사용될 수 있도록 데이터를 구성합니다.
예시 페이로드 구조:
{
"____FORM_ACTION": "...",
"payload": {
"__proto__": {
"vulnerableProperty": {
"constructor": {
"prototype": {
"exec": "require('child_process').execSync('rm -rf /')"
}
}
}
}
}
}이러한 페이로드는 서버 측에서 역직렬화될 때,
vulnerableProperty가 접근되는 순간 exec 함수가 정의되고, 이후 다른 정상적인 코드 흐름에서 이 exec 함수가 호출되면 공격자의 코드가 실행되는 방식으로 동작합니다.결론적으로, 이 논문은 React Server Actions의 편리함 이면에 숨겨진 직렬화 취약점을 통해 발생할 수 있는 심각한 보안 위협(RCE)을 상세히 설명하며, 개발자와 보안 연구자들에게 이 기능의 안전한 사용과 검증의 중요성을 강조합니다.