CVE-2019-10768

사이트 간 스크립팅
영향
AngularJS
<1.7.9
in
AngularJS
항목을 찾을 수 없습니다.
느낌표 아이콘
패치 사용 가능
이 취약점은 HeroDevs에서 제공하는 네버엔딩 지원(NES) 버전에서 수정되었습니다.

재현 단계

그리고 merge() 함수는 여러 객체를 하나의 새로운 객체로 결합하는 데 사용되는 AngularJS의 함수입니다. 이 높은 수준의 취약점에 취약합니다.. 이 명령은 다음 속성을 추가하거나 수정하는 데 사용할 수 있습니다. Object.prototype.

자바스크립트를 사용하면 마법 속성을 포함하여 객체의 모든 속성을 병합할 수 있습니다. __proto__와 생성자 및 프로토타입을 공격할 수 있습니다. 특히 이 익스플로잇을 사용하면 __proto__ 속성을 변경하여 Object.prototype 취약점을 노출할 수 있습니다. 왜냐하면 Object.prototype 속성이 모든 자바스크립트 객체에 상속되므로 공격자는 코드 실행에 영향을 줄 수 있는 광범위한 권한을 갖게 됩니다. 이는 원격 코드 실행 또는 자바스크립트 예외 트리거를 통한 서비스 거부로 이어질 수 있습니다.

자세히 알아보기 GitHub.

문제 해결

이 익스플로잇은 버전 1.7.9 이전의 모든 AngularJS 버전에 존재합니다. 업그레이드할 수 없는 경우, HeroDevs 네버엔딩 지원 AngularJS 클라이언트는 Angular 1.5와 호환되는 고정 버전의 AngularJS에 액세스할 수 있습니다. 공격에 취약한 대상은 다음과 같습니다:

  • 웹 서버
  • 애플리케이션 서버
  • 웹 브라우저로 이동합니다.

학습 및 예방

이러한 종류의 공격을 방지하는 데 도움이 되는 몇 가지 방법이 있습니다:

  1. 프로토타입을 고정합니다. 사용 객체.동결(객체.프로토타입) 는 프로그램의 유연성을 심각하게 제한하는 과감한 조치이지만, 이러한 유형의 공격을 방지할 수 있습니다.
  2. 스키마 유효성 검사가 필요합니다.  JSON 입력을 스캔("위생 처리")하여 포함되지 않도록 할 수 있습니다. __proto__ 속성입니다.
  3. 안전하지 않은 재귀 병합 함수를 사용하지 마세요. 이 권장 사항은 유효하지만, 문제는 재귀 병합 함수의 본질에 있는 것이 아니라 merge() 함수를 재귀적이든 아니든, 위험한 속성을 맹목적으로 복사하여 Object.prototype.
  4. 프로토타입 없이 객체를 사용합니다. 고려 사항 Object.create(null) 또는 프록시 객체 또는 사용자 정의 클래스를 사용하여 프로토타입을 사용하지 않는 객체를 만들 수 있습니다. 다음에서 상속하지 않는 객체는 Object.prototype 는 오염에 취약하지 않습니다.
  5. 배열과 map()을 사용합니다. 객체를 사용하는 대신 merge()배열을 사용하고 map() 기능을 사용하여 프로토타입 오염 가능성을 완전히 방지할 수 있습니다.

결론

이 취약점에 설명된 수정 사항은 1.7.9에 있으며, 아직 Angular 1.5를 사용 중인 HeroDevs AngularJS 네버엔딩 지원 고객도 즉시 사용할 수 있습니다. 잠재적으로 비용이 많이 드는 공격을 피하기 위한 지원이 필요한 경우, 지금 바로 HeroDevs에 문의하세요.

리소스

NIST BDSA-2019-10768 entry

취약점 세부 정보
ID
CVE-2019-10768
영향을 받는 프로젝트
AngularJS
영향을 받는 버전
<1.7.9
게시 날짜
2019년 11월 19일
≈ 수정 날짜
2019년 11월 1일
다음에서 수정되었습니다.
심각도
중요
카테고리
사이트 간 스크립팅