레고의 인기는 전 세계적이다. 아이들부터 어른들까지, 사용자의 연령층도 다양하다. 그래서 레고는 중고 시장도 공식적으로 운영하는데, 여기서 위험한 취약점들이 발견됐다. API 보안에 대한 새로운 인식 제고가 필요하다.
[보안뉴스 문가용 기자] 인기 높은 온라인 레고 마켓플레이스의 API에서 오류가 발견됐다. 이를 공격자들이 익스플로잇 할 경우 사용자 계정을 탈취하고 민감한 정보를 탈취할 수 있게 된다고 한다. 일부 기업 서비스들을 침해하는 것도 가능하다. 보안 업체 설트시큐리티(Salt Security)가 공식 중고 레고 거래 플랫폼인 브릭링크(BrickLink)에서 발견한 내용이다.
![[보안뉴스 / 12.17.] 온라인 중고 레고 시장 브릭링크에서 기초적인 API 취약점 발견돼](http://www.boannews.com/media/upFiles2/2022/12/701171394_6512.jpg)
[이미지 = utoimage]
취약점은 총 두 가지로, 하나는 피해자의 장비에 코드를 주입하고 실행시킬 수 있게 해 주는 XSS 취약점이고, 다른 하나는 XXE 주입 공격을 가능하게 하는 취약점이라고 한다. “문제는 레고가 보안 인식이 엉망인 채로 서비스를 만들었다는 게 아닙니다. API라는 필수 요소에도 취약점이 매우 흔한 것이며, 아직 레고 정도나 되는 회사들도 이를 완벽하게 관리하지 못할 정도로 문제가 만연하다는 것입니다. 이제 API 보안은 모든 기업들의 필수 도입 요소가 되었습니다.”
API가 활용되는 사례는 빠르게 증가하고 있지만 웹 개발자들과 디자이너들은 아직 이 API의 안전한 사용법을 다 인지하지 못하고 있다. 그래서 설터시큐리티는 “이번에 발견된 것과 같은 API 취약점들을 여러 온라인 서비스들에서 발견하곤 한다”고 한다. “평소 보안 관련 사고도 없었고, 꼼꼼하게 서비스와 앱을 기획해 만드는 회사들도 이 API에서 허술한 모습을 보입니다. 그 대표적인 사례가 레고인 것이죠.”
보안 업체 스택호크(StackHawk)의 CSO인 스콧 걸라흐(Scott Gerlach)는 “API 보안은 생산과 출시 맨 마지막 단계에서 보완되는 것이라고 여기는 기업들이 대부분”이라고 지적한다. “이번에 발견된 두 가지 취약점들도 정식 생산과 개발 전 보안 점검 단계에서 충분히 찾아낼 수 있었던 취약점입니다. 하지만 아직 많은 개발자들과 디자이너들이 API를 적용해서 기능을 갖춰두는 것만 고민을 합니다. 보안은 나중에 생각나면 살피는데, 생각 못할 때도 많죠.”
빠른 대응
레고의 브릭링크는 100만 명 이상의 회원을 보유한 플랫폼이다. 그리고 레고는 보안의 측면에서 그리 못하는 회사는 아니다. API의 취약점이 발견된 건 10월 18일이고, 제보가 레고에 들어간 건 10월 23일이었다. 레고는 이틀 만에 취약점을 확인했다고 답장을 보냈고, 11월 10일에는 문제가 해결됐음을 설트시큐리티가 고지를 받고 실험을 통해 확인했다.
“하지만 레고의 내부 규정 때문에 취약점에 대한 상세 내용을 공유하지는 못한다고 합니다. 그래서 저희가 할 수 있는 건 저희 편에서의 실험 결과를 확인하는 것이지, 취약점이 완전히 해결되었다고 100% 확정할 수는 없습니다. 게다가 이 규정 때문에 실제 해킹 공격 시도 여부에 대해서 저희조차 공개할 수가 없습니다.” 설트시큐리티 측의 설명이다.
취약점 찾기
설트시큐리티는 브릭링크의 쿠폰 검색 기능을 실행했을 때 뜨는 대화상자 속 ‘사용자 이름 찾기(Find Username)’라는 기능에서 XSS 오류를 먼저 찾아냈다고 한다. 브릭링크 사이트의 다른 페이지에서 찾아낸 세션 ID를 사용하면 이 오류를 익스플로잇 할 수 있다는 사실을 알아냈다. “사용자 이름 찾기 대화상자를 통해 사용자는 아무 텍스트나 입력할 수 있습니다. 그 텍스트는 웹 페이지의 HTML 속에 임베드 되고요. 그러니 여기에 뭘 입력하느냐에 따라 HTML에 영향을 줄 수 있게 되는 겁니다.”
민감한 독자라면 알아챘겠지만 이 공격을 성립시키려면 ‘다른 페이지에서 찾아낸 세션 ID’가 필요하다. 즉 이 XSS 취약점 하나만으로는 공격이 되지 않는다는 것이다. “공격에 필요한 세션 ID는 사용자의 세션을 중간에서 가로채거나 계정 탈취를 통해 획득해야 합니다. 공격자들에게 있어 이는 그리 어려운 일이 아닙니다. XSS 취약점 익스플로잇에 대한 전제 조건이 맞긴 하지만, 그리 까다로운 성격의 것이 아니고, 따라서 공격이 실재할 가능성은 낮지 않습니다.”
두 번째 취약점의 경우 ‘원하는 목록에 업로드(Upload to Wanted List)’라는 기능에서 발견됐다. 역시 사용자들의 입력값을 받아 처리하는 기능으로, 사용자들은 이를 통해 자신이 원하는 중고 부품을 명시할 수 있게 된다. “그런데 여기에 특정 조건이 성립되면 애플리케이션을 통해 접근할 수 없어야 하는 정보가 노출됩니다. 브릭링크의 XML 처리 방식에 기인한 취약점이라고 할 수 있습니다. XXE 주입 공격을 통해 취약점을 익스플로잇 할 수 있고, 공격자는 크리덴셜을 획득할 수 있게 됩니다.”
비슷한 API 오류들 미리 제거하기
설트시큐리티가 이번에 발견된 취약점들을 공개한 것은 API에서 흔히 나타나는 실수들을 공개하고 사고 예방을 돕기 위해서다. “API 취약점들의 경우 취약점들을 연쇄적으로 익스플로잇 할 때 특히나 위험해질 수 있습니다. 이를 막기 위해서 기업들이 할 수 있는 일은 “사용자가 입력하는 값을 절대로 믿지 않는다”는 원칙을 고수하는 것이라고 설트시큐리티는 강조한다.
“사용자들이 항상 좋은 의도로, 기업이 원하는 형식 그대로 뭔가를 입력하리라고 기대하는 건 보안의 관점에서 매우 위험한 것입니다. 입력값을 받아 처리하기 전에 반드시 검사부터 해야 합니다. 이와 관련하여 보다 상세한 정보를 얻기 위해서는 OWASP의 ‘XSS 예방을 위한 커닝 페이퍼(XSS Prevention Cheat Sheet)’를 참조하는 것이 좋습니다.”
또한 웹에 직접 연결되어 있는 사이트들에서는 세션 ID 정보를 구현하는 데에 있어 늘 조심해야 한다고 설트시큐리티는 강조한다. “세션 ID 정보는 공격자들이 항상 노리는 것입니다. 이 정보만 있으면 세션 하이재킹과 계정 탈취를 쉽게 할 수 있거든요. 그러니 이 세션 ID라는 것을 다룰 때는 항상 조심에 조심을 해도 모자라다고 생각해야 합니다. 절대로 노출시켜서는 안 됩니다.”
또한 설트시큐리티는 XXE 주입 공격을 막기 위해 할 수 있는 가장 간단한 방법은 “XML 파서의 설정에서 ‘External Entities’를 비활성화시키는 것”이라고 제안한다. “OWASP은 ‘XXE 예방을 위한 커닝 페이퍼(XXE Prevention Cheat Sheet)’라는 가이드도 제공합니다. 이 역시 API 보안을 위해 참조해야 할 중요한 문서입니다.”
3줄 요약
1. API가 활발히 사용되고 있지만, API 보안 인식은 상당히 뒤쳐져 있음.
2. API도 보호해야 할 요소라는 것을 명확히 인지하고 앱/서비스/사이트 개발 단계 처음부터 API 보안을 구축해야 함.
3. 특히 사용자가 입력하는 값을 있는 그대로 신뢰하지 않는 게 중요.
[국제부 문가용 기자(globoan@boannews.com)]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>