그들은 Rust and Go의 네트워크 라이브러리에서 취약점을 발견하여 IP 유효성 검사를 방지합니다.

최근에 취약점에 대한 정보가 공개되었습니다. 언어의 표준 라이브러리에서 발견된 러스트 앤 고, 어느 것 IP 주소의 잘못된 취급과 관련된 주소 분석 기능에서 XNUMX진수로.

e라고 언급되어 있다.이러한 취약점을 통해 유효한 주소 및예를 들어, 서버 측 요청 스푸핑 공격이 수행될 때 루프백 인터페이스 주소 또는 인트라넷 서브넷에 대한 액세스를 구성하는 응용 프로그램입니다.

이 두 언어의 취약점 IP 주소 문자열은 사양에 구현되어 있습니다. XNUMX부터 시작합니다. 이론상으로는 XNUMX진수로 해석되어야 하지만 이러한 결함을 일으키는 문제는 많은 라이브러리가 이를 고려하지 않고 XNUMX을 버리므로 그들은 결국 값을 십진수로 취급합니다.

예를 들어, 이러한 버그에서 IP 주소가 어떻게 해석되는지 이해하기 위해 0177진수로 된 숫자 127은 십진수로 0177.0.0.1이며 공격자가 "127.0.0.1" 값을 지정하는 리소스를 요청할 수 있습니다. XNUMX진수로, 이에 대한 십진 표기법은 "XNUMX"입니다.

그 이유는 문제가 있는 라이브러리 중 하나를 사용하는 경우 응용 프로그램은 주소의 발생을 감지하지 못합니다 서브넷 0177.0.0.1의 127.0.0.1이지만 실제로 요청을 보낼 때 주소 "0177.0.0.1"을 호출할 수 있습니다. 이 주소는 잘못된 해석으로 인해 네트워크 기능이 이를 127.0.0.1로 처리합니다. 마찬가지로 인트라넷 주소에 대한 액세스는 다양한 값을 지정하여 속이고 확인할 수 있으며, 공격자는 이 값을 악용 가능성에 대해 평가합니다.

의 측면에 Rust, 문제는 표준 라이브러리 "std :: net"에 종속되는 것으로 나타났습니다. 이미 "CVE-2021-29922"로 분류되어 있습니다. 그것은 그것을 설명합니다 이 라이브러리의 IP 주소 파서는 값 앞의 XNUMX을 버립니다. 그러나 0177.0.0.1자리 이하로 지정된 경우에만 예를 들어 "XNUMX"은 잘못된 값으로 해석되고 응답으로 잘못된 결과가 반환됩니다.

Rust-lang 표준 "net" 라이브러리의 잘못된 XNUMX진수 문자열 입력 유효성 검사를 통해 인증되지 않은 원격 공격자가 rust-lang std :: net에 의존하는 많은 프로그램에 대해 불확실한 SSRF, RFI 및 LFI 공격을 수행할 수 있습니다. IP 주소의 옥텟은 유효한 IP 주소로 평가되는 대신 제거된 상태로 남아 있습니다.

std :: net :: IpAddr 라이브러리를 사용하는 응용 프로그램도 언급됩니다. 지정된 주소를 파싱할 때 사용자 잠재적으로 SSRF 공격에 취약 (서버 측 요청 스푸핑), RFI (원격 파일 포함) 및 BIA (로컬 파일 포함). 마찬가지로 공격자는 127.0.026.1을 입력할 수 있습니다. 이는 실제로 127.0.22입니다.

예를 들어, std :: net :: IpAddr을 기반으로 하는 웹 응용 프로그램에 IP 주소를 보내는 공격자는 3진수 입력 데이터를 입력하여 SSRF를 유발할 수 있습니다. 공격자는 옥텟이 08자리인 경우 악용 가능한 IP 주소를 보낼 수 있습니다. 최소 악용 가능한 옥텟 099은 서비스 거부로 이어지고 최대 악용 가능한 옥텟 XNUMX는 서비스 거부로 이어집니다. 

이 취약점에 대해 더 알고 싶다면 Rust에서 세부 사항을 확인할 수 있습니다. 다음 링크에서. 또한 Rust 1.53.0 분기에서 취약점이 수정되었다는 언급도 있습니다.

자마자 영향을 미치는 문제에 이동하려면 이것이 표준 라이브러리 «net»의 대상이라고 언급되어 있습니다. 이미 CVE-2021-29923에 나열되어 있습니다. 설명에는 다음과 같이 언급되어 있습니다. 인증되지 않은 원격 공격자가 SSRF, RFI 및 LFI 공격을 수행할 수 있습니다. golang의 내장 net.ParseCIDR 기능에 의존하는 많은 프로그램에서 불확실합니다. 개별 CIDR IP 옥텟은 유효한 IP 옥텟으로 평가하는 대신 제거됩니다.

예를 들어, 공격자는 값 00000177.0.0.1을 전달할 수 있습니다. 이 값은 net.ParseCIDR 함수에서 확인할 때 177.0.0.1/24가 아니라 127.0.0.1/24로 구문 분석됩니다. 문제는 Kubernetes 플랫폼에서도 나타납니다. 취약점은 Go 버전 1.16.3 및 베타 버전 1.17에서 수정되었습니다.

당신은 그것에 대해 더 배울 수 있습니다 이 취약점에 대해 다음 링크에서.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.