23P by xguru 1달전 | favorite | 댓글 1개
  • 얼마 전 삼성 기기의 JSON 인젝션 취약점을 이용해 기기에서 코드 실행까지 이어지는 공격 체인을 발생시킬 수 있었음
  • 페이로드의 JSON을 맹목적으로 신뢰하는 API를 어떻게 악용할 수 있는지에 대한 교훈이 될 수 있음

모든 것에 "스마트"하게 인젝션하기

  • 삼성 스마트 허브의 경우 모바일 앱이 허브와 원격으로 통신하여 연결된 모든 것을 제어할 수 있었음
  • /credentials 엔드포인트로 악성 POST 요청을 보내 허브가 원격 서버에 연결하는 데 사용되는 자격 증명을 수정하고 데이터를 변조하여 SQL 인젝션으로 이어질 수 있었음
  • 삼성이 의존하는 json-c 라이브러리가 JSON_TOKENER_STRICT=0으로 컴파일되어 문자열을 작은따옴표와 큰따옴표로 정의할 수 있게 함
  • 이를 통해 공격자가 허브의 내부 sqlite 데이터베이스에 사용자 지정 열을 만들 수 있었음
  • camera 테이블에 과도하게 긴 ROP 체인을 삽입한 다음 /cameras 엔드포인트로 DELETE를 보내 video-core 프로세스가 데이터를 읽으려고 시도하다 충돌하게 만들어 전통적인 스택 기반 버퍼 오버플로우를 일으킬 수 있었음
  • 여기서 배운 내용은 JSON 인젝션 → SQL 인젝션 → 버퍼 오버플로우 → ROP = 장악이었음

JSON 인젝션이란?

  • JSON 인젝션은 악성 데이터를 JSON 스트림에 삽입하여 응용 프로그램 동작을 변경하거나 의도하지 않은 작업을 트리거할 수 있는 취약점
  • 서버 측 JSON 인젝션은 신뢰할 수 없는 소스의 데이터가 서버에서 제대로 정리되지 않고 직간접적으로 코드에 사용될 때 발생

문제는 파서에 있음

  • 최신 웹 애플리케이션과 API에서는 요청 파이프라인 내에 각각 독특한 특징과 취약점을 가진 여러 파서가 사용될 수 있음
  • 파서 간의 불일치와 다단계 요청 처리가 결합되어 심각한 취약점이 발생할 수 있음
  • JSON 파서는 공식 JSON RFC가 중복 키와 숫자 표현과 같은 주제를 개방형으로 남겨두기 때문에 어려움에 직면함
  • 공식 RFC가 유일한 규격은 아니며 ECMAScript, JSON5, HJSON, Binary JSON(BSON)도 있음
  • 파서 간 상호 운용성은 많은 사람들이 존재하는 것조차 알지 못하는 보안 위험을 노출시킴

JSON 파서 상호 운용성의 보안 문제

  • 중복 키를 처리하는 방식의 불일치
  • 특수 문자나 주석을 처리하는 방식의 불일치
  • JSON (역)직렬화의 불일치

JSON을 어떻게 악용할까?

  • JSON을 조작하여 개발자가 예상하지 못한 방식으로 응용 프로그램이 작동하도록 데이터를 주입할 수 있음
  • API 인프라 내에서 데이터가 구성 요소를 통과하는 방식을 조작할 수 있을 때 비즈니스 로직을 제어할 수 있는 기회가 생김
  • 파서가 입력을 처리하는 방식을 이해하면 파서의 동작을 악용하여 데이터를 조작할 수 있는 방식으로 해석하도록 하여 입력 검증을 우회할 수 있음

결론

  • 삼성 스마트 허브 공격은 JSON 인젝션이 SQL 인젝션부터 원격 코드 실행에 이르기까지 복잡한 취약점 체인으로 이어질 수 있는 한 가지 예시일 뿐임
  • 근본 원인은 종종 JSON 파서, 특히 여러 특이한 파서가 관련된 경우 데이터를 처리하는 방식의 불일치에 있음
  • JSON 객체가 어떻게 직렬화, 역직렬화, 처리되는지 철저히 검사함으로써 정제 필터를 우회하고 비즈니스 로직에 영향을 미칠 수 있는 페이로드를 작성하는 방법을 알아낼 수 있음
  • API가 계속해서 현대 애플리케이션의 초석이 되고 있기 때문에 API가 데이터를 처리하는 방식의 보안을 보장하는 것이 그 어느 때보다 중요함

json body로 받은 데이터 validation 빡세게 해야겠네요