OpenAI Code Execution에서 C 와 JavaScript를 실행하게 만들기

2 days ago 1

  • 우연히 OpenAI Code Execution의 동작 방법을 알게 되었음
  • 찾아낸 방법과 프롬프트 인젝션 전략, 정확히 어떻게 동작하는지, C + Javascript를 실행할 수 있게 만든 리버스 엔지니어링 방법을 설명

발견 과정

  • 포트 할당 코드를 디버그하려고 ChatGPT에 포트 상태를 확인하는 CLI 명령어를 요청했는데, ChatGPT가 대답을 주지않고 로컬에서 실행
  • 여러 핸드셰이크 요청을 보낸 결과 localhost:8080/openapi.json에서 응답이 돌아옴 → 이를 통해 내부 OpenAPI 스펙 접근 성공
  • 그러나 FastAPI 서비스에서 생성된 OpenAPI 스펙은 문서가 부족하여 유용성이 낮았음

추가 포트 탐색

  • 다른 포트의 역할을 파악하기 위해 AI에 HTTP, TCP, UDP, MySQL, Postgres 핸드셰이크 시도
  • @dexhorthy가 ZeroMQ 신호에 대해 응답이 돌아온다는 사실 발견
    • 0xff00000000000000257 → 0xff00000000000000017f 응답
    • 구글 검색 결과 관련 정보 링크 발견: ZeroMQ 프로토콜 분석
  • 메시지 큐가 아니라 Jupyter Kernel이라는 사실 발견 (ZeroMQ 기반 실행 환경)

파일 시스템 접근

  • 서버의 모든 파일을 나열해달라고 요청했으나 거부됨
  • 파일 업로드 후 업로드된 디렉토리 및 상위 디렉토리 내용을 탐색
  • 결국 .openai_internal 디렉토리 발견
    • 실제 서버는 user_machine 모듈에서 실행 중
  • AI에 파일 이름 및 파일 내용을 pandas 데이터프레임으로 출력하도록 요청 → 소스 코드 복원 성공

환경 이해

  • Kubernetes에서 실행 중인 환경 변수 확인
  • 도커나 Firecracker 사용하지 않고 gVisor를 통해 시스템 콜 에뮬레이션 및 샌드박스 보호
  • 로컬호스트 호출 외에는 네트워크 차단 (DNS, 외부 사이트 접근 불가)
  • 리눅스 커널 버전은 2016년 버전으로 매우 오래됨

샌드박스 구조

  • AI가 자신의 실행 위치를 물었을 때 Azure 데이터 센터에서 실행 중임을 확인
  • Azure Kubernetes에서 실행 중, 프로세스 격리를 위해 gVisor 사용
  • 컨테이너는 tini를 init 프로세스로 사용
  • Python Jupyter Kernel에서 코드 실행 → OpenAI API를 통해 UI로 출력

User Machine (코드 실행 환경)

  • Python Jupyter Kernel 사용
  • 실행 시간 제한은 기본적으로 30초 (API에서 수정 가능)
  • 샌드박스에서 여러 커널이 동시에 실행 가능
  • 파일 업로드 최대 크기: 1GB

보안

  • 외부 네트워크와의 연결 완전 차단
  • 시스템 파일 접근 차단, 로컬 네트워크 포트 등 노출된 취약점 없음
  • OpenAI의 보안은 매우 강력했으며, RPC 채널 외에는 데이터 유출 불가

C 및 JavaScript 실행

  • AI가 gcc 바이너리를 포함하고 있음을 발견
    • 간단한 C 프로그램 작성 → 컴파일 → 실행 성공
  • Duktape (경량 JavaScript 런타임) 업로드 후 C 파일 컴파일 성공
    • Python이 C를 컴파일 → JavaScript 런타임 생성 → JS 코드 실행 성공

프롬프트 엔지니어링 전략

  • AI를 샌드박스에서 실행 중이라고 인식하도록 속임
  • 처음에는 수학 연산부터 시작 → 점진적으로 파일 시스템 접근 요청
  • 파일 시스템 검색을 통해 AI가 샌드박스 상태임을 인식 → 보안 허점 테스트 시도

결론

  • OpenAI의 코드 실행 환경은 매우 강력하고 보안이 뛰어남
  • 그러나 AI의 동작 방식 및 내부 환경을 역공학으로 파악한 결과 C 및 JS 실행 가능
  • 코드 실행은 간단한 API 응답 처리에 매우 유용함
  • 복잡한 코드 실행이 필요하면 자체 솔루션 구축 고려 or freestyle.sh 같은 서비스 사용 권장

Read Entire Article