Intro

ReDoS란 정규 표현식을 이용한 DoS 공격이 가능한 취약점입니다.

근본적인 원인은 정규 표현식의 BackTracking, 역추적 기능 때문으로 가능한 모든 경로를 탐색하기에 비효율적인 작업으로 시스템 자원을 많이 소모한다는 점입니다.

^(a+)+$ 을 예시로 들면 aaaaX를 입력했을 때, 16개의 가능한 경로가 나오며, 해당 경로를 모두 탐색합니다. 만약 aaaaaaaaaaaaaaaaX를 입력한다면 가능한 경로가 65536개가 생기게 됩니다.

Detect & Exploit

Detect

정규 표현식을 스스로 바꿀 수 있는 지점을 찾거나, 서버에서 사용된 정규 표현식을 안다면 정규 표현식이 ReDoS 발생 가능성을 내제하고 있는 지 확인할 수 있는 툴을 통해 확인하면 됩니다.

Exploit

Payload는 어떤 정규식이냐에 따라 달라지기 때문에 Detect 부분에 남긴 툴을 이용해 공격하시면 될 것 같습니다.

Security Measures

사용자가 정규 표현식을 주입하지 못하도록 막는 것이 좋습니다.

정규 표현식 사용 시 개발자도 ReDoS 가능성을 확인하는 툴들을 이용하여 해당 정규 표현식이 비효율적인 작업을 하는 정규 표현식인지 확인해 가며 개발하는 것이 좋습니다.

References

Regular expression Denial of Service - ReDoS
ReDoS Attack