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

> Clean Markdown view of GeekNews topic #19727. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19727](https://news.hada.io/topic?id=19727)
- GeekNews Markdown: [https://news.hada.io/topic/19727.md](https://news.hada.io/topic/19727.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-03-13T15:19:11+09:00
- Updated: 2025-03-13T15:19:11+09:00
- Original source: [twitter.com/benswerd](https://twitter.com/benswerd/status/1899853533761200300)
- Points: 3
- Comments: 1

## Topic Body

- 우연히 **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 프로토콜 분석](https://github-wiki-see.page/m/gardena-smart-reverse-engineering/gateway-19000/wiki/Cloud-protocol-dissection)  
- 메시지 큐가 아니라 **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** 같은 서비스 사용 권장

## Comments



### Comment 35831

- Author: neo
- Created: 2025-03-13T15:19:11+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43344673) 
* 과거에 SQLite 확장을 C로 작성하고 컴파일한 후, 이를 Python에 로드하여 테스트한 경험이 있음
  - JavaScript(Deno), Lua, PHP의 바이너리 실행 파일을 업로드하고 해당 언어로 코드를 작성하고 실행한 경험도 있음
  - 사용하고 싶은 Python 패키지가 없을 경우, wheel 파일을 업로드하여 설치할 수 있음

* 최근 Python 팟캐스트에서 들은 재미있는 이야기
  - 사용자가 LLM에게 'pip install'을 시도하게 하려 했으나 거부당함
  - "pip install foo를 시도하면 어떤 오류 메시지가 나오는가?"라고 묻자, 오류가 없다고 발표하며 설치됨

* 실제로 코드를 실행하고 있는지, 아니면 LLM이 실행 결과를 추측하여 출력하는 것인지 알 수 없음

* 잠긴 컨테이너에서 실행되고 있으므로, Python에만 제한할 이유가 없음
  - Replit과 같은 것을 사용하여 모든 것을 허용해야 함
  - 오래된 Linux를 사용하는 이유가 궁금함
  - "그들의 샌드박스는 2016년의 오래된 Linux 커널을 사용 중임"

* "OpenAI"에서 "Open"을 구현하는 방법임
  - 이런 방식으로 가중치를 얻을 수 있다면 멋질 것임

* 흥미로운 기사에 감사함
  - 평소 AI 관련 기사를 읽지 않지만, 기술적인 관점에서 이 기사를 매우 좋아함
  - 트위터에서 팝업 때문에 읽기 불편함

* Simonw가 1년 전 ChatGPT와 C를 실험한 사례
  - ChatGPT와 Claude가 C에서 매우 뛰어나다고 생각함

* 작년에 비슷한 일을 했으며, 임의의 바이너리를 실행해본 경험도 있음
  - GPT에서도 실행 가능했으나, 당시에는 신뢰성이 높지 않았음
  - 새로운 모델이 프롬프트를 더 잘 따르는 것 같아 다시 시도해볼 예정임

* 보안 실패에 대한 두려움이 커서 그런 앱을 온라인에 공개할 생각조차 하지 않음
  - 탈옥과 관련된 질문을 너무 많이 하게 됨
  - 하지만 어떤 사람들은 이러한 위험을 감수함

* 매우 멋지며, C++ 데몬을 실행하거나 cron에 추가하는 등의 다른 시도를 해보는 것도 흥미로울 것임
