- Kobold letters는 HTML 이메일이 처음에는 무해해 보이다가 전달 후 다른 수신자에게 피싱 내용으로 바뀌게 만드는 공격 기법임
- 핵심은 이메일 클라이언트가 허용하는 CSS와, 전달 과정에서 바뀌는 DOM 위치를 이용해 특정 문구를 숨기거나 다시 표시하는 데 있음
- Thunderbird와 Outlook on the web은 DOM 구조와 CSS 재작성 방식 때문에 전달 후 숨겨진 문구가 나타날 수 있고, Gmail은 전달 시 스타일 제거로 더 단순한 형태의 노출이 가능함
- Mozilla, Microsoft, Google에는 2024년 3월 5일 문제가 보고됐으며, Microsoft는 3월 26일 즉각 조치 없이 종료했고 Google은 4월 9일 수정 작업 중임을 확인함
- 사용자는 HTML 이메일을 끄거나 제한 모드로 볼 수 있지만,
<style>차단은 기존 이메일 생태계의 많은 사용 사례를 깨뜨릴 수 있어 클라이언트 차원의 완화가 쉽지 않음
공격 시나리오와 핵심 아이디어
- 관리자가 전달한 이메일이 처음에는 무해한 문의 메일처럼 보이다가, 전달된 뒤 새 수신자에게는 피싱 요청으로 바뀔 수 있음
- 수신자는 발신자가 아는 사람이고, 경우에 따라 암호학적 서명까지 붙어 있으며, 전화로 전달 사실을 확인해도 속을 수 있음
- 원래 수신자인 관리자는 자신이 전달한 이메일에서 피싱 문구를 보지 못했기 때문에, 전달 사실을 확인해도 공격 여부를 알아차리기 어려움
Kobold letters의 동작 방식
- 대부분의 이메일 클라이언트는 HTML 이메일에서 CSS 스타일링을 허용함
- 이메일이 전달되면 원본 이메일의 DOM 위치가 보통 바뀌고, 공격자는 이 변화를 기준으로 CSS 선택자를 적용함
- 공격자는 문맥에 따라 나타나거나 사라지는 요소를 이메일에 넣을 수 있음
- 평소에는
display: none;으로 숨김 - 전달 후 DOM 구조가 바뀌면
display: block !important;같은 규칙으로 표시함
- 평소에는
- 이런 요소는 보통 보이지 않다가 특정 상황에서만 나타나며, 피싱 등에 악용될 수 있어 kobold letters라고 부름
- HTML 이메일을 지원하는 이메일 클라이언트와 웹메일 전반이 영향을 받을 수 있음
Thunderbird에서의 동작
- Thunderbird 관련 문제는 Mozilla에 2024년 3월 5일 보고됐고, 2024년 3월 20일 공개 예정일과 초안이 전달됨
- 가능한 완화책은 논의됐지만, 구현은 나중으로 미뤄질 예정임
- Thunderbird는 이메일을
<div class="moz-text-html" lang="x-unicode"></div>로 감싸고, 그 외에는 거의 변경하지 않음 - 이메일을 전달하면 인용된 원본 이메일이 다시
<div></div>안에 들어가 DOM에서 한 단계 아래로 이동함 - 예시 CSS는
.kobold-letter를 기본적으로 숨기고,.moz-text-html>div>.kobold-letter조건에서만 표시함 - 원본 이메일을 보는 사람에게는 항상 보이는 문단만 표시되지만, 전달된 이메일을 받은 사람에게는 숨겨졌던 문단이 갑자기 나타남
- 공격자는 DOM 내 상대 위치를 알고 CSS를 제어할 수 있어 이메일 일부를 숨기거나 보여 내용 전체를 바꿀 수 있음
- kobold letter를 오버레이처럼 스타일링하면 전달자가 원본 메일에 추가한 코멘트까지 대체할 수 있어 피싱 기회가 더 늘어남
Outlook on the web에서의 동작
- Outlook on the web 문제는 Microsoft에 2024년 3월 5일 보고됐고, 2024년 3월 20일 공개 예정일과 초안이 전달됨
- Microsoft는 2024년 3월 26일 즉각적인 조치를 하지 않기로 하고 보고를 종료 처리함
- OWA는 웹메일이라 상황이 더 복잡하며, 이메일은
<div class="rps_78fa"></div>같은 컨테이너에 들어가지만 정확한 클래스 이름은 바뀜 - Outlook은 이메일 CSS가 웹메일 UI 스타일에 영향을 주지 않도록 id와 class 앞에
x_를 붙이고 CSS도 함께 조정함 - 예시에서 원본 이메일의 CSS는 OWA 표시 시 다음처럼 변환됨
.rps_78fa .x_kobold-letter {display:none}.rps_78fa > div > div > .x_kobold-letter {display:block!important}
- 전달 후에는 클래스가 다시
x_x_kobold-letter처럼 바뀌고 CSS도 다시 업데이트됨 - 두 번째 규칙에서
.rps_78fa와div사이의>가 사라지므로, 복잡한 선택자를 만들 때 이를 고려해야 함 - OWA의 조정은 공격 자체를 막지는 않지만, 여러 클라이언트에서 동시에 동작하는 kobold letter를 만들 때는 번거로운 제약이 됨
Gmail에서의 동작
- Gmail 문제는 Google에 2024년 3월 5일 보고됐고, 2024년 3월 20일 공개 예정일과 초안이 전달됨
- Google은 2024년 4월 9일 수정 작업 중이라고 확인함
- Gmail은 이메일을 전달할 때 모든 스타일을 제거하므로, CSS 선택자로 표시 여부를 문맥에 따라 바꾸는 좁은 정의의 kobold letters에는 기술적으로 취약하지 않음
- 하지만 더 단순한 공격은 가능함
- 원본 이메일에서 CSS로 kobold letter를 숨김
- 전달 시 스타일이 제거되면서 숨겨진 요소가 자동으로 표시됨
- 이 방식은 제한적이며, 원본에서는 보이고 전달 후에는 사라지는 반대 동작은 할 수 없음
- Gmail은 이메일을 보내기 전 편집기에서는 CSS를 아직 제거하지 않기 때문에, 전달자가 코멘트를 작성하는 동안에도 숨겨진 문단이 보이지 않음
- 결과 이메일에서는 스타일이 제거되어 두 번째 문단이 나타남
- Gmail이 편집기 단계에서 CSS를 제거하면 전달자가 보내기 전에 공격을 발견할 수 있어 문제가 완화될 수 있음
기존 유사 사례와 차이
- HTML 이메일에서 CSS로 회신·전달 콘텐츠가 바뀔 수 있다는 점은 새롭지 않음
- 과거에도 유사한 문제가 보고됨
- Kobold letters의 차이는 특정 공격 시나리오에 초점을 맞추고, 여러 이메일 클라이언트를 함께 살펴본다는 점임
- HTML 이메일의 위험성과 이를 완화하기 위한 트레이드오프 논의가 필요함
완화책과 한계
- 사용자는 HTML 이메일을 완전히 비활성화하거나 Thunderbird의 “plain HTML” 같은 제한 모드로 볼 수 있음
- 이메일 클라이언트가
<style>사용을 막으면 문제를 해결할 수 있지만, 이메일 생태계의 기존 많은 사용 사례가 깨질 수 있음 - Gmail처럼 전달 시 스타일을 제거하는 구현은 스타일 있는 기업 뉴스레터를 허용하면서 HTML 이메일 위험을 제한하는 절충안이 될 수 있음
- 가까운 미래에 이메일 클라이언트가 강력한 완화책을 구현하리라고 기대하기는 현실적이지 않음
- 사용자는 HTML 이메일의 위험을 인지하고 필요한 예방 조치를 직접 취해야 함