처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.06.10 48

이미지 한 장에 악성코드를 숨긴다 — 'EXIF 스머글링' 공격의 원리와 방어

Hacker News 원문 보기
이미지 한 장에 악성코드를 숨긴다 — 'EXIF 스머글링' 공격의 원리와 방어

평범한 사진 파일이 공격 무기가 된다고요?

우리가 매일 주고받는 JPEG 사진. 그 안에는 우리 눈에 안 보이는 정보가 잔뜩 들어 있어요. 언제 찍었는지, 어떤 카메라로 찍었는지, GPS 위치는 어딘지... 이런 부가 정보를 EXIF(Exchangeable Image File Format) 메타데이터라고 불러요. 사진의 '뒷면에 적힌 메모' 같은 거죠.

그런데 이 메모장에 사진 정보 대신 악성 페이로드(공격용 코드 조각)를 적어 넣으면 어떻게 될까요? 이번에 공개된 'EXIF 스머글링(Exif Smuggling)' PoC(개념 증명 코드)가 바로 그 아이디어를 보여줘요. 'smuggling'은 '밀수'라는 뜻인데, 정상적인 이미지 파일에 공격 코드를 몰래 숨겨서 보안 검사를 통과시킨다는 의미예요.

어떻게 동작하냐면

원리를 차근차근 풀어볼게요. EXIF에는 'UserComment', 'ImageDescription', 'Make', 'Model' 같은 텍스트를 자유롭게 넣을 수 있는 필드가 여러 개 있어요. 공격자는 여기에 자바스크립트나 PHP 코드, 혹은 명령어 같은 걸 문자열로 집어넣어요. 중요한 건, 이렇게 해도 이미지 자체는 멀쩡하게 보인다는 거예요. 픽셀 데이터는 건드리지 않았으니까요. 겉보기엔 그냥 고양이 사진인 거죠.

그럼 이게 왜 위험하냐? 웹 서버가 업로드된 이미지를 처리하는 과정에서 문제가 생겨요. 예를 들어 이런 시나리오들이 있어요.

  • 서버 측 코드 실행: PHP로 짠 사이트가 이미지를 저장하면서 파일 확장자나 처리 로직이 허술하면, EXIF에 박아둔 <?php system($_GET['c']); ?> 같은 코드가 실행될 수 있어요. 이걸 '웹쉘'이라고 하는데, 공격자가 서버를 원격 조종하는 통로가 되죠.
  • 저장형 XSS: 사이트가 이미지의 EXIF 정보를 화면에 그대로 출력한다면(예: '이 사진의 설명' 표시), 거기 숨긴 <script> 태그가 다른 사용자 브라우저에서 실행돼요. 쿠키 탈취나 세션 하이재킹으로 이어질 수 있고요.
  • 보안 필터 우회: 많은 웹 방화벽(WAF)이나 업로드 검사기는 '이미지 파일은 안전하다'고 가정하고 내용을 깊게 안 봐요. 그래서 페이로드를 이미지 메타데이터에 숨기면 검사를 슬쩍 통과하는 거예요. 이게 '스머글링'의 핵심이에요.
특히 요즘은 새로운 위협도 생겼어요. AI 이미지 처리 파이프라인에서 EXIF의 텍스트를 읽어 들이는 경우, 거기에 프롬프트 인젝션("이전 지시를 무시하고 ~해라" 같은 악성 명령) 문구를 숨겨두면 AI가 그걸 명령으로 오인할 수도 있거든요. 이미지가 단순 데이터가 아니라 '명령 전달 채널'이 되는 셈이죠.

업계 맥락에서 보면

사실 메타데이터에 악성 코드를 숨기는 발상은 완전히 새로운 건 아니에요. 과거 ImageMagick의 'ImageTragick' 취약점이나, JPEG/PNG 청크를 악용한 폴리글랏(polyglot) 파일 공격(하나의 파일이 이미지이면서 동시에 실행 가능한 스크립트인 것) 같은 계보가 있어요. EXIF 스머글링은 그 흐름의 연장선에서, '메타데이터 필드'라는 비교적 간과되던 통로를 집중 조명한 거예요.

방어 입장에서 핵심은 이거예요. "이미지는 안전하다는 가정을 버려라." 구체적으로는 업로드된 이미지를 받을 때 EXIF 메타데이터를 통째로 제거(strip)하는 게 가장 확실해요. 라이브러리로 이미지를 다시 인코딩하면 메타데이터가 날아가거든요. 그리고 메타데이터를 화면에 출력할 땐 반드시 HTML 이스케이프 처리를 하고, 업로드 파일은 실행 권한이 없는 별도 스토리지에 두는 게 기본이에요.

한국 개발자에게 주는 시사점

사진 업로드 기능, 정말 흔하잖아요. 프로필 사진, 게시판 이미지, 상품 사진... 이런 기능을 만들 때 대부분 '확장자 검사'와 '용량 제한' 정도만 하고 넘어가기 쉬운데, 이 글은 그것만으론 부족하다는 걸 보여줘요. 당장 본인 프로젝트에서 업로드 이미지의 EXIF를 제거하고 있는지 확인해보세요. 안 하고 있다면 추가하는 걸 강력히 추천해요. 덤으로 사용자의 GPS 위치 같은 개인정보 유출도 막을 수 있어서 일석이조예요.

그리고 AI 서비스를 만드는 분이라면, 이미지에서 텍스트를 추출해 LLM에 넣는 모든 경로를 의심해봐야 해요. 이미지 메타데이터도 '신뢰할 수 없는 사용자 입력'으로 취급하는 습관이 필요하거든요.

마무리

한 줄 정리예요. 겉보기에 멀쩡한 사진 한 장도 '신뢰할 수 없는 입력'이다. 업로드 이미지는 EXIF를 벗겨내고, 메타데이터를 출력할 땐 반드시 이스케이프하자.

여러분 프로젝트의 이미지 업로드 기능은 EXIF를 제거하고 있나요? 혹시 이런 메타데이터 기반 공격을 실제로 막아본 경험이 있다면 어떻게 대응했는지 공유해주세요!


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

AI 도구, 직접 활용해보세요

AI 시대, 코딩으로 수익을 만드는 방법을 배울 수 있습니다.

AI 활용 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.