CVE-2022-29577

Posted by : on

Category :


취약점 번호 - CVE-2022-29577

영향을 주는 프로그램 - AntiSamy 1.6.7버전 이하

취약점이 주는 영향 - 타입의 경계값에 있는 노드의 수로 인해 값 검증이 제대로 이루어지지 않을 수 있다

취약점 요약 - Html 스타일 컨텐츠와의 조합을 이용한 XSS 공격 취약점에 대한 수정인 CVE-2022-28367에 대해 불완전한 수정으로 인한 오류를 수정한다

취약점 대처 방안 - 취약한 소스 수정

취약점 대처 - 취약한 소스 수정

원본 버그 리포트

AntiSamy는 신뢰할 수 없는 출처에서 받아온 HTML 소스에 대한 공격을 빠르게 검증하기 위한 라이브러리이다.

AntiSamy는 XSS등의 공격을 막을 수 있도록 도와주는 라이브러리로, Child Note의 개수에 대한 타입 값이 정해져 있지 않아 발생하는 잘못된 값 검증이 수정되었다.

소스코드는 다음과 같이 변경되었다.

if (ele.getChildNodes().getLength() > 0)
->
int childNodesCount = ele.getChildNodes().getLength();
if (childNodesCount > 0)
/*
* 원본 데이터에서 타입이 지정되어있지 않던것을 int형으로 고정시켰다.
*/

for (int i = 1; i < ele.getChildNodes().getLength(); i++)
->
for (int i = childNodesCount - 1; i >= 1; i--)
/*
* 추가적으로 1부터 n까지 반복하던것을 위에서부터 아래로 내려오도록 만들었다.
* 해당 문은 i가 int의 한계값이 될 경우 음수값으로 넘어가기 때문에 생길 수 있는 오버플로우를 예방하기 위함으로 보인다.
*/

공격 시나리오 - ???

이미 발견된 취약점에 대해 조치가 되었지만, 완전하지 못한 조치로 인해 제대로 검증이 되지 않는 현상이다.

소스코드에 따르면 ele는 Element형이며, Node형을 상속한다.

getChildNodes()NordList를 반환하며 getLength()는 int형을 반환하고 있어 결과적으로는 문제가 되지 않는 것으로 보인다.

하지만 사용 라이브러리를 변경하거나 라이브러리가 업데이트 되는 등(만일 된다면)의 이유로 타입이 변경되게 된다면 오버플로우가 일어날 수 있기 때문에 코드를 변경한 것으로 보인다.

추가적으로 어떤 형태로 문제가 일어날 수 있는지 간단한 소스코드를 작성하여 실행해보았지만 자바는 long -> int형의 변환을 허용하고 있지 않았다. (구버전에서는 실행해보지 않음)

따라서 문제가 생길 수 있는 여지를 없애는것으로만 보인다.


Useful Links