그들은 샌드박스 스크립트에서 명령을 실행할 수 있는 Python의 취약점을 발견했습니다.

몇일 전에 Python의 격리된 코드 실행 시스템을 우회하는 방법 공개, Python 2.7에 나타나 2012년에 확인되었으며 아직 Python 3에서 수정되지 않은 오래 알려진 버그의 사용을 기반으로 합니다.

언급된다 버그는 호출을 시작하기 위해 특별히 바인딩된 파이썬 코드를 사용할 수 있습니다. Python에서 이미 해제된 메모리(Use-After-Free)로. 처음에는 오류가 보안 위협을 나타내지 않으며 일반적으로 인위적으로 생성되는 매우 드문 경우에만 스크립트의 비정상 종료로 이어질 수 있다고 가정했습니다.

kn32라는 가명으로 보안 연구원이 이 문제에 관심을 갖게 되었고 os.system과 같은 메서드에 직접 액세스하지 않고도 모든 시스템 명령을 호출할 수 있는 기능적 익스플로잇을 준비했습니다.

익스플로잇은 순수 Python으로 구현되며 외부 라이브러리를 가져오지 않고 작동합니다. "code.__new__" 드라이버를 설치하지 않고. 후크 중 "builtin.__id__"만 사용되며 일반적으로 금지되지 않습니다. 실용적인 측면에서 제안된 코드는 Python 코드의 실행을 허용하지만 사용 가능한 제한이 있는 다양한 서비스 및 환경(예: 학습 환경, 온라인 셸, 내장 컨트롤러 등)에서 격리 메커니즘을 우회하는 데 사용할 수 있습니다. os.system과 같은 액세스 방법을 호출하고 허용하지 않습니다.

제안된 코드 os.system 호출과 유사합니다. CPython의 취약점을 악용하여 작동합니다. 익스플로잇은 x3-86 시스템의 모든 Python 64 버전에서 작동하며 PIE, RELRO 및 CET 보안 모드가 활성화된 경우에도 Ubuntu 22.04에서 안정적입니다.

작업 파이썬 코드에서 함수 중 하나의 주소에 대한 정보를 얻는 것으로 요약됩니다. CPython 실행 코드에서.

이 주소를 기반으로 메모리에 있는 CPython의 기본 주소와 로드된 libc 인스턴스에 있는 system() 함수의 주소가 계산됩니다. 마지막에 첫 번째 인수의 포인터를 "/bin/sh" 문자열로 교체하여 지정된 주소 시스템으로의 직접 전환이 시작됩니다.

악용에 대한 가장 쉬운 접근 방식은 해제된 버퍼의 길이와 동일한 길이로 목록을 만드는 것입니다. 이 목록에는 해제된 버퍼와 같은 위치에 할당된 항목 버퍼(ob_item)가 있을 가능성이 큽니다.

이것은 동일한 메모리 조각에 대해 두 가지 다른 "보기"를 얻게 됨을 의미합니다. 메모리뷰라는 뷰는 메모리가 우리가 임의로 쓰거나 읽을 수 있는 바이트 배열일 뿐이라고 생각합니다. 두 번째 보기는 메모리가 PyObject 포인터의 목록이라고 생각하는 우리가 만든 목록입니다. 이것은 우리가 메모리 어딘가에 가짜 PyObject 이메일을 생성하고, memoryview에 기록하여 목록에 주소를 쓴 다음, 목록을 인덱싱하여 액세스할 수 있음을 의미합니다.

PoC의 경우 버퍼에 0을 쓰고(16행) print(L[0])로 액세스합니다. L[0]은 0인 첫 번째 PyObject*를 얻은 다음 print가 그 안의 일부 필드에 액세스하려고 시도하여 null 포인터 역참조가 발생합니다.

언급된다 이 버그는 적어도 python 2.7 이후의 모든 python 버전에 존재합니다. 익스플로잇은 거의 모든 버전의 Python 3에서 작동하도록 설계되었지만 이것이 Python 2에서 재현할 수 없다는 의미는 아닙니다(저자에 따르면).

익스플로잇의 목적은 system("/bin/sh")을 호출하는 것입니다. 단계는 다음과 같습니다.

  • CPython 누출 이진 함수 포인터
  • CPython 기본 주소 계산
  • 시스템 또는 PLT 스텁의 주소를 계산합니다.
  • /bin/sh를 가리키는 첫 번째 인수를 사용하여 이 주소로 이동합니다.
  • 승리

마지막으로 익스플로잇은 대부분의 구성에서 유용하지 않을 것이라고 언급했습니다. 그러나 코드를 격리하려는 Python 인터프리터, 가져오기 제한 또는 감사 후크 사용에 유용할 수 있습니다.

최종적으로 그것에 대해 더 많이 알고 싶다면 참고에 대한 내용은 원본 간행물을 참조할 수 있습니다. 다음 링크.


코멘트를 남겨주세요

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

*

*

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