알골리아(Algolia)는 웹 검색을 제공하는 SaaS 형태의 호스트 검색 엔진 서비스이다. 회원가입 및 알골리아 API 키 발급 후 웹 사이트 및 모바일 애플리케이션 내 연동하면 빠른 검색 처리와 원활한 구현이 가능하다는 장점이 있다. 때문에 매월 수천 개의 회사의 애플리케이션이 알골리아를 사용한다. 

이렇게 많은 웹에 사용되는 알골리아의 API 키 보안 문제가 최근 발견되었다. 싱가포르 보안 회사 CloudSEK에서 2022년 11월 21일 발표한 보고에 의하면, 하드코딩 된 수 백만 사용자의 Algolia API Key를 탈취할 수 있는 보안 문제가 발견되었다고 한다.

Algolia의 API는 회사에서 음성, 모바일 및 웹 사이트 응용 프로그램에 검색, 발견 및 권장 사항을 통합하는 데 사용됩니다. 현재 Lacoste, Stripe, Slack, Medium 및 Zendesk를 포함한 11,000개 이상의 회사에서 연간 1조 5천억 개의 검색 쿼리를 관리하는 데 사용하고 있습니다.

그러나 세계 최초의 모바일 앱용 보안 검색 엔진인 CloudSEK의 BeVigil은 Algolia API 키를 유출한 1,550개의 앱을 식별했습니다. 이 중 수백만 건의 다운로드가 이루어진 32개의 앱에는 공격자가 수백만 사용자의 데이터를 훔치기 위해 악용할 수 있는 하드 코딩된 키가 있습니다.

출처 : Hardcoded Algolia API Keys Could be Exploited by Threat Actors to Steal Millions of Users’ Data – CloudSEK

이 분석 글에서는 알골리아 API 키 유출로 인해 발생할 수 있는 공격에 대한 분석과 노출된 API 키를 탐지하는 방법 및 권한 통제 방법에 대해 다룬다.

알골리아 API 키 구성 및 작동 방식

알골리아가 적용된 웹을 운영하는 대표적 사례로는  “Lacoste”, “Stripe”, “Slack”, “Medium”등이 있다. 알골리아 API가 작동하는 방식은 사용자의 입력 값을 각각의 자모음 한 개씩 서버에 요청하여 응답을 받는 방식이다.

이 때 API 인증에 x-algolia-application-id, x-algolia-api-key 키가 사용된다.

알골리아 웹사이트에 설명된알골리아 API 작동 방식에 대한 설명
알골리아 웹사이트에 설명된알골리아 API 작동 방식에 대한 설명

알골리아 API 키는 알골리아 홈페이지에 로그인 후 Setting > API Keys 메뉴에서 확인할 수 있으며, API 키는 용도에 따라 아래의 다섯 가지 API 키로 제공된다.

  1. 검색 전용 API 키
  2. 관리자 API 키
  3. 사용량 API 키
  4. 모니터링 API 키
  5. 애널리틱스 API 키
알골리아 API 키를 확인할 수 있는 설정 메뉴 화면
알골리아 API 키를 확인할 수 있는 설정 메뉴 화면

그 중 ‘관리자 API 키’ 권한이 있을 경우 <검색 전용 API 키, 모니터링 API 키, 사용량 API 키 및 애널리틱스 API 키>를 모두 사용할 수 있다. 때문에, 공격자가 관리자 API 키를 탈취할 경우 다음과 같은 작업이 가능해진다.

알골리아 관리자 API 키 탈취 후 공격자가 행할 수 있는 작업 목록

출처 : 알골리아 API 키 가이드 문서

• 검색(search): 검색 작업을 수 행할 수 있습니다.
• 색인 찾아보기(browse): 찾아보기 끝점으로 모든 색인 데이터를 검색 할 수 있습니다.
• 레코드 추가(addObject): 인덱스에 레코드를 추가하거나 업데이트할 수 있습니다.
• 기록 삭제 (deleteObject): 기존 기록을 삭제할 수 있습니다.
• 목록 인덱스(listIndexes): 모든 기존 인덱스 목록을 가져올 수 있습니다.
• 인덱스 삭제(deleteIndex): 인덱스를 삭제할 수 있습니다.
• 인덱스 설정 가져오기(settings): 모든 인덱스 설정을 읽을 수 있습니다.
• 인덱스 설정 설정(editSettings): 모든 인덱스 설정을 업데이트할 수 있습니다.
• 분석 API 사용(analytics): 애널리틱스 API로 데이터를 검색할 수 있습니다.
• 추천 API 사용(recommendation): 추천 API와 상호 작용할 수 있습니다.
• 사용 API 사용 (usage): 사용 API로 데이터를 검색할 수 있습니다.
• 액세스 로그(logs): 로그를 조회할 수 있습니다.
• 검색할 수 없는 속성 가져 오기(seeUnretrievableAttributes ): unretrievableAttributes 레코드를 반환하는 모든 작업에 대해 검색할 수 있습니다.

이와 같이 관리자 API Key는 모든 작업이 가능하므로, 오직 최고 관리자만이 취급할 수 있어야 한다.

알골리아 관리자 API 키 권한 설정에 대한 중요 안내 문구
알골리아 관리자 API 키 권한 설정에 대한 중요 안내 문구

알골리아 API 키 노출된 어플리케이션 OSINT 검색엔진으로 찾는 방법

CloudSEK의 발표 내용에 따르면, 알골리아의 API 자체가 취약한 것이 아니라 API를 사용하는 개인 또는 기업이 잘못 활용하여 유출이 발생한다고 한다.

알골리아 API 키가 노출되어 있는 어플리케이션은 OSINT 보안 검색엔진 Criminal IP 에서 아래 두 가지 쿼리를 사용하면 간단히 검색할 수 있다.

총 973개의 API 키가 노출된 알골리아 서버 IP 주소가 검색된다.

Search Query: x-algolia-api-key status_code: 200

Search Query: x-algolia-application-id status_code: 200

Criminal IP 검색엔진으로 API 키가 노출된 알골리아 서버 검색, 973개 IP 주소가 검색된다
Criminal IP 검색엔진으로 API 키가 노출된 알골리아 서버 검색, 973개 IP 주소가 검색된다

검색 된 사이트에 접속해 개발자 도구의 네트워크를 조회하면 실시간 사용자의 입력 값에 대한 응답으로 API가 동작하는 것을 확인할 수 있으며, algolia agent, api key, api id 값이 노출되어있다.

알골리아 API ID와 Key가 노출되고 있는 알골리아 적용 웹 서버의 페이로드
알골리아 API ID와 Key가 노출되고 있는 알골리아 적용 웹 서버의 페이로드

노출된 알골리아 API 키 권한 확인 방법

다만 이번 사건은 API 키 값이 노출 된 것 만으로 취약하다고 볼 수는 없다. API 키에 대한 권한 통제가 되지 않은 경우에만 실질적인 공격이 가능하기 때문이다.

API 키에 대한 권한 통제 여부를 확인하는 방법은 다음과 같다.

명령 프롬프트에 아래 내용에 노출된 알골리아 API 키 값과 ID를 적용해 입력하면 된다.

curl -X GET -H "X-Algolia-API-Key: {API-KEY}" -H "X-Algolia-Application-Id: {Application-ID}" "https://{Application-ID}.algolia.net/1/logs"

권한 통제가 잘 되어있을 경우 아래와 같은 메세지가 출력된다.

{"message":"Invalid Application-ID or API key","status":403}

권한 통제가 되지 않았을 경우에는 다음과 같은 Log 형식으로 권한 별 통제에 대한 응답이 출력 된다.

{"message":"Method not allowed with this API key","status":403}root@xxxxxxxxxx:~7b5137" -H "X-Algolia-Application-Id: {Application_ID" "https://{Application_ID.algolia.net/1/logs"
{"logs":[{"timestamp":"2022-11-25T09:22:06Z","method":"GET","answer_code":"403","query_body":"","answer":"\n{\n  \"message\": \"Method not allowed with this API key\",\n  \"status\": 403\n}\n","url":"/1/logs","ip":"x.x.x.x","query_headers":"Host: {Application_ID.algolia.net\nUser-Agent: curl/7.47.0\nAccept: */*\nX-Algolia-API-Key: a321****************************\nX-Algolia-Application-Id: {Application_ID\n","sha1":"xxxxxxxxxxxxxxxxxxxxxxx","processing_time_ms":"1"},{"timestamp":"2022-11-25T09:21:06Z","method":"GET","answer_code":"403","query_body":"","answer":"\n{\n  \"message\": \"Method not allowed with this API key\",\n  \"status\": 403\n}\n","url":"/1/logs","ip":"x.x.x.x","query_headers":"Host: {Application_ID.algolia.net\nUser-Agent: curl/7.83.1\nAccept: */*\nX-Algolia-API-Key: a321****************************\n

API 키 유출 등의 취약점을 빠르게 점검하기 위해서는 기업 사용자의 경우 Criminal IP RMR, 개인 사용자의 경우 Criminal IP 검색엔진 또는 API를 활용해 공격 표면을 관리하는 것을 적극 추천한다.

관련하여 API Key 노출로 인해 발생하는 개인정보 유출 사고 및 권한 탈취 보안 사고에 대해 분석한 글을 참고해도 좋다.


데이터 출처 : Criminal IP(https://www.criminalip.io/ko)

관련 글 :