▍
'코드 실행'을 공식 기능으로 제공하는 서비스라, 제출된 한 줄이 서버 전체를 장악하는 백도어가 될 수 있는 구조 — 보안 3요소(기밀성·무결성·가용성)가 모두 위협.
발견한 위협
- 가용성(DoS) — 무한 루프 제출로 CPU 100% 점유, 타임아웃 미처리로 서비스 마비
- 무결성(RCE) — system("rm -rf ...") / curl | sh 류로 서버 명령 실행 가능
- 기밀성(유출) — system("env > ...")로 DB 자격증명 등 환경변수 탈취 위험
조치 ① 위험 호출 사전 차단 (code_security)
forbidden = [r'system\s*\(', r'fork\s*\(', r'exec', r'signal\s*\(']
for pattern in forbidden:
if re.search(pattern, code):
return False, [{'severity': 'CRITICAL', 'message': 'Forbidden C system call'}]
return True, []조치 ② 자원 고갈 차단 (code_compiler)
except subprocess.TimeoutExpired:
process.kill() # 타임아웃 초과 즉시 종료
stdout, stderr = process.communicate()
raise포렌식 — 제출 코드 채증
DB의 실행 로그에서 공격 계정의 제출 코드를 시각·언어와 함께 조회해 무한 루프·블로킹 I/O 패턴을 확인했다.
SELECT created_at, language, code
FROM test_cases_execution_logs
WHERE user_id = '<redacted>'
ORDER BY created_at DESC
LIMIT 3;