CVE-2022-25844

사이트 간 스크립팅
영향
AngularJS
>=1.8
in
AngularJS
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

재현 단계

버전이 1.7.0 이상인 AngularJS 패키지는 이 정규식 서비스 거부(ReDoS) 익스플로잇에 취약합니다. 앱에서 사용자가 제공한 값을 $locale.NUMBER_FORMATS.PATTERNS[1].posPre에 할당하는 경우, 공격자는 ' '.repeat(1000000)과 같이 매우 많은 수의 공백으로 구성된 값을 제공하여 서비스 거부를 유발할 수 있습니다. 이 익스플로잇을 시연하는 개념 증명은 StackBlitz에서 확인할 수 있습니다.

문제 해결

이 문제는 1.7.0 이상의 모든 AngularJS 버전에 존재하며, 수정 사항이 포함된 라이브러리 버전은 없습니다. 그러나 개발자는 사용자가 제공한 값이 $locale.NUMBER_FORMATS.PATTERNS[1].posPre에 할당되지 않거나 값의 길이가 몇 자로 제한되어 있는지 확인할 수 있습니다.

학습 및 예방

서비스 거부 공격은 시스템의 합법적인 사용자에게 리소스를 남기지 않는 방식으로 표적 시스템의 리소스를 사용하도록 설계되었습니다. 이 익스플로잇은 정규 표현식 서비스 거부(ReDoS) 유형으로, 대상 시스템이 오랜 시간이 걸리는 정규 표현식 패턴 일치를 해결하도록 시도합니다. 

정규식 엔진은 일치하는 항목을 찾으려고 시도하면서 일련의 단계를 실행합니다. 이러한 단계 중 일부는 빠르게 완료될 수 있지만 다른 단계, 특히 실패하는 단계는 훨씬 더 오래 걸립니다. 1000000개의 공백과 같이 매우 많은 수의 공백으로 구성된 문자열 값이 주어지면 브라우저는 결과를 반환하는 데 엄청난 시간을 소비할 수 있습니다.

일부 일치하는 단계가 실패하여 정규식 엔진이 대안을 실행하기 위해 백업을 해야 하는 경우 특히 그렇습니다. 이러한 경우 1,000,000의 공백 수는 기만적입니다. 엔진이 실행하려고 시도하는 실제 단계 수는 1,000,000의 기하급수적 값이 될 수 있으므로 대상 시스템을 독점할 수 있습니다.

결론

이 익스플로잇에는 수정 사항이 없지만, 이 익스플로잇이 공개되었을 때 HeroDevs 네버엔딩 서포트 for AngularJS의 고객에게 익스플로잇에 대한 알림이 전달되었습니다. 고객이 아니면서 구독에 관심이 있는 경우 지금 바로 영업팀에 문의하세요.

리소스

NIST 2022-25844 항목