
평범한 사진 파일이 공격 무기가 된다고요?
우리가 매일 주고받는 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)이나 업로드 검사기는 '이미지 파일은 안전하다'고 가정하고 내용을 깊게 안 봐요. 그래서 페이로드를 이미지 메타데이터에 숨기면 검사를 슬쩍 통과하는 거예요. 이게 '스머글링'의 핵심이에요.
업계 맥락에서 보면
사실 메타데이터에 악성 코드를 숨기는 발상은 완전히 새로운 건 아니에요. 과거 ImageMagick의 'ImageTragick' 취약점이나, JPEG/PNG 청크를 악용한 폴리글랏(polyglot) 파일 공격(하나의 파일이 이미지이면서 동시에 실행 가능한 스크립트인 것) 같은 계보가 있어요. EXIF 스머글링은 그 흐름의 연장선에서, '메타데이터 필드'라는 비교적 간과되던 통로를 집중 조명한 거예요.
방어 입장에서 핵심은 이거예요. "이미지는 안전하다는 가정을 버려라." 구체적으로는 업로드된 이미지를 받을 때 EXIF 메타데이터를 통째로 제거(strip)하는 게 가장 확실해요. 라이브러리로 이미지를 다시 인코딩하면 메타데이터가 날아가거든요. 그리고 메타데이터를 화면에 출력할 땐 반드시 HTML 이스케이프 처리를 하고, 업로드 파일은 실행 권한이 없는 별도 스토리지에 두는 게 기본이에요.
한국 개발자에게 주는 시사점
사진 업로드 기능, 정말 흔하잖아요. 프로필 사진, 게시판 이미지, 상품 사진... 이런 기능을 만들 때 대부분 '확장자 검사'와 '용량 제한' 정도만 하고 넘어가기 쉬운데, 이 글은 그것만으론 부족하다는 걸 보여줘요. 당장 본인 프로젝트에서 업로드 이미지의 EXIF를 제거하고 있는지 확인해보세요. 안 하고 있다면 추가하는 걸 강력히 추천해요. 덤으로 사용자의 GPS 위치 같은 개인정보 유출도 막을 수 있어서 일석이조예요.
그리고 AI 서비스를 만드는 분이라면, 이미지에서 텍스트를 추출해 LLM에 넣는 모든 경로를 의심해봐야 해요. 이미지 메타데이터도 '신뢰할 수 없는 사용자 입력'으로 취급하는 습관이 필요하거든요.
마무리
한 줄 정리예요. 겉보기에 멀쩡한 사진 한 장도 '신뢰할 수 없는 입력'이다. 업로드 이미지는 EXIF를 벗겨내고, 메타데이터를 출력할 땐 반드시 이스케이프하자.
여러분 프로젝트의 이미지 업로드 기능은 EXIF를 제거하고 있나요? 혹시 이런 메타데이터 기반 공격을 실제로 막아본 경험이 있다면 어떻게 대응했는지 공유해주세요!
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공