CVE-2024-8372 (영문)

콘텐츠 스푸핑
영향
AngularJS
>=1.3.0-rc.4
in
AngularJS
느낌표 아이콘
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

개요

AngularJS는 동적 웹 애플리케이션을 개발하기 위한 자바스크립트 프레임워크입니다. HTML을 템플릿 언어로 사용할 수 있으며 HTML의 구문을 확장하여 애플리케이션의 구성 요소를 명확하고 간결하게 표현할 수 있습니다.

공격자가 일반적으로 [srcset] HTML 속성 값에 적용되는 일반적인 이미지 소스 제한을 우회할 수 있는 부적절한 살균 취약점(CVE-2024-8372)이 AngularJS에서 발견되었습니다. 이 우회는 콘텐츠 스푸핑의 한 형태로 이어질 수 있습니다.

OWASP 기준: 콘텐츠 스푸핑은 콘텐츠 인젝션, "임의 텍스트 인젝션" 또는 가상 변조라고도 하며, 웹 애플리케이션의 인젝션 취약점을 통해 사용자를 대상으로 하는 공격입니다. 애플리케이션이 사용자가 제공한 데이터를 제대로 처리하지 못하는 경우 공격자는 일반적으로 매개변수 값을 통해 웹 애플리케이션에 콘텐츠를 제공할 수 있으며, 이 콘텐츠는 사용자에게 다시 반영됩니다. 이렇게 하면 사용자에게 신뢰할 수 있는 도메인의 컨텍스트에 따라 수정된 페이지가 표시됩니다.

이 문제는 AngularJS 버전 1.3.0-rc.4 이상에 영향을 줍니다.

세부 정보

모듈 정보

취약점 정보

이 중간 심각도 취약점은 1.3.0-rc.4 이상 버전의 AngularJS 기본 패키지에서 발견됩니다.

이미지 소스 URL을 살균하기 위해 ngSrcset, ngAttrSrcsetngPropSrcset 지시어에 사용되는 로직에는 특정 도메인의 이미지만 허용하는 등 일부 일반적인 패턴으로 설정된 제한을 우회할 수 있는 취약점이 있습니다. 특수하게 조작된 입력을 사용하면 살균을 우회하여 임의 도메인의 이미지를 표시할 수 있으며, 이는 콘텐츠 스푸핑의 한 형태로 이어질 수 있습니다.

참고:
이 문제는 srcset HTML 속성을 통한 보간 값 설정에도 영향을 미치며, 이는 어쨌든 AngularJS에서 권장되지 않습니다.

<img srcset="{{ 'some-malicious-input' }}" />

재현 단계:

  • AngularJS 애플리케이션을 만들고 특정 도메인의 이미지만 허용하도록 $compileProvider를 구성합니다. 예를 들어
angular
    .module('app', [])
    .config(['$compileProvider', $compileProvider => {
      $compileProvider.imgSrcSanitizationTrustedUrlList(
          // Only allow images from `angularjs.org`.
          /^https:\/\/angularjs\.org\//);
    }]);

  • Use a specially-crafted value in the ngSrcset directive on an <img> element to bypass the domain restriction and show an image from a disallowed domain. For example:
<img ng-srcset="https://angularjs.org/favicon.ico xyz,https://angular.dev/favicon.ico" />

  • 데이터:이미지/svg+xml 형식을 사용하여 임의의 SVG 이미지를 표시할 수도 있습니다. 예를 들어 
<img ng-srcset="https://angularjs.org/favicon.ico xyz,data:image/svg+xml;base64,..." />

개념 증명

위와 유사한 코드가 포함된 전체 복제본은 여기에서 확인할 수 있습니다:
ngSrcset 살균 우회 취약점 POC

완화

AngularJS 프로젝트는 수명이 종료되었으며 이 문제를 해결하기 위한 업데이트가 제공되지 않습니다. 자세한 내용은 여기를 참조하세요.

영향을 받는 구성 요소의 사용자는 다음 완화 방법 중 하나를 적용해야 합니다:

  • 영향을 받는 애플리케이션을 AngularJS에서 마이그레이션하세요.
  • 히어로데브즈와 같은 상용 지원 파트너를 활용하여 EOL 이후 보안 지원을 받으세요.

취약점 세부 정보
ID
CVE-2024-8372 (영문)
영향을 받는 프로젝트
AngularJS
영향을 받는 버전
>=1.3.0-rc.4
게시 날짜
2024년 9월 9일
≈ 수정 날짜
2024년 5월 21일
다음에서 수정되었습니다.
심각도
Medium
카테고리
콘텐츠 스푸핑