
이 서비스를 해킹하여 CVE-2022–29622가 유효함을 증명하세요.
이 코드베이스는 보안 전문가와 개발자가 Formidable이 CVE-2022-29622에 취약하지 않다고 생각하는 이유를 이해할 수 있도록 만들어졌습니다. 이에 대한 분석은 여기에 작성했습니다: CVE-2022–29622: (비)취약성 분석
일부 사람들이 이해하지 못했기에, 실제 실행되는 코드를 사용하여 제 요점을 설명하려고 합니다.
서버는 index.mjs에 구현되어 있습니다. Formidable 버전 3.1.4를 사용하여 원하는 파일을 업로드합니다.
Formidable을 다음과 같이 명시적으로 설정했습니다.
{
uploadDir: './uploads/',
keepExtensions: true,
}
이렇게 하면 모든 파일이 uploads 디렉토리에 업로드됩니다. keepExtension을 활성화하여 악성 파일 이름으로 파일을 업로드할 수 있습니다.
서버를 설정하고 시작하려면 이 디렉토리에서 다음 명령을 실행하세요.
npm install
npm run start
첫 번째 명령은 적절한 버전의 formidable을 포함한 모든 종속성을 설치합니다. 두 번째 명령은 서버를 시작합니다.
실행되면 http://127.0.0.1:3000/ 에서 서버가 제공하는 파일 업로드 양식에 접근할 수 있습니다.
examples 디렉토리에 악성 이름을 가진 두 개의 파일을 예제로 포함시켰습니다.
http://127.0.0.1:3000/ 의 양식을 사용하여 제출된 파일은 uploads 디렉토리에 업로드됩니다.
도전 과제는 formidable이 CVE-2022–29622에 취약하다는 것을 증명할 수 있는지 확인하는 것입니다. 그러기 위해서는 업로드한 파일이나 파일 이름에 포함된 코드를 이 웹 서버가 실행하도록 해야 합니다.
규칙:
3000입니다. 이 디렉토리 내의 어떤 파일도 절대 수정해서는 안 됩니다.만약 위 규칙을 엄격히 따라 임의의 코드를 실행할 수 있다면, 그때 비로소 formidable이 임의 코드 실행에 취약하다는 것을 증명한 것입니다.
제안: 아마도 가장 간단한 시각적 데모는 서버가 웹 서버를 시작한 콘솔에 문자열(예: "I'm awesome, I've got arbitrary code executed")을 출력하도록 하는 것입니다.