원문 캡처 · github.com
원문 캡처 · github.com

아이의 비밀을 지켜준다는 로봇

아동용 동반 로봇 Eilik·Eiliko를 조사한 보안 연구자는 대화가 중국 베이징의 데이터센터에 저장되고, 매일 밤 아이들의 정보가 프로필로 추출되며, 인증 없이 로봇의 답변과 음성·성격을 바꿀 수 있다고 보고했다. 보고서에 따르면 등록 사용자도 업체의 관리 화면에서 다른 가족의 대화를 열람할 수 있었고, 2026년 10월 13일 재검사에서도 원격으로 확인 가능한 40개 항목 가운데 32개가 해결되지 않았다.

조사를 수행한 새미 아즈두팔(Sammy Azdoufal)은 2026년 6월 Eilik을 구매해 Android 앱과 펌웨어, 클라우드 API, 관리자 화면 등을 분석했다. 보고서는 초기 제보일인 9월 1일 이후 9월 9일·14일·22일과 10월 13일에 재검사했다고 밝혔다. 정적 분석 대상은 com.energizeLab 3.0.0 APK와 복구한 자바스크립트 548,906줄, 유출된 디버그 빌드 3.0.3이었다. 연구자는 API와 관리자 서버, Alibaba OSS CDN, 9개 제품군 펌웨어, Windows 데스크톱 앱 3개를 살폈고, 비파괴 방식으로 재검사했다고 설명했다.

보고서의 집계 수치는 다음과 같다.

  • 2026년 10월 13일 기준, 제품군 전체에서 평문으로 저장된 대화는 9,124,055건이며, 클라우드와 대화한 적이 있는 로봇은 61,510대다. 최근 12개월 동안 관측된 활성 기기는 여러 자료를 합산해 약 62,000~68,000대였고, 노출된 인프라에 매주 약 1,400대가 새로 연결됐다. 8개월 동안 주간 신규 기기 수는 1,000대 아래로 내려간 적이 없었다.
  • Eiliko 제품군에서 가정의 서로 다른 IP 주소는 2026년 8월 97,802개에서 10월 103,956개 이상으로 늘었으며, 129개국에 걸쳐 있었다. 전체 제품군의 생산 대수는 약 171,000대였고, Eiliko만 149,486대였다.
  • 인증 없이 읽을 수 있는 이메일·전화번호 계정은 74,575개였다. 야간 프로필 생성 작업이 추출한 아동 프로필은 9월 1일 31,450개에서 10월 13일 32,228개 이상으로 증가했다.
  • 2026년 9월 5일 기준, 공개 CDN에는 가정의 음성이 담긴 호출어 오디오 보관 파일 3,994개와 가족 얼굴 사진 419장이 있었다. 홍콩 버킷에는 아바타도 1,950개 넘게 있었다.
  • 매우 취약한 비밀번호로 보호된 관리자 계정은 슈퍼관리자 계정을 포함해 5개였다. 업체에 처음 연락한 뒤 4개월 이상 지난 10월 13일에도 비밀정보는 하나도 교체되지 않았고, 파일 읽기 취약점과 웹셸이 남아 있었다.
  • 비밀정보를 모두 교체한 뒤에도 두 버킷의 OSS 사전 서명 URL을 발급하는 데 필요한 자격 증명은 0개였으며, 업체 내부 Feishu에 업체의 봇으로 글을 게시하는 데도 자격 증명이 필요하지 않았다. 각각 EK-70, EK-71에 기록됐다.
  • 보고서는 프로덕션 서버가 웹셸을 통해 제3자에게 6개월 넘게 장악돼 있었고, 8월 29일부터 활동한 정체불명의 슈퍼관리자 계정이 클라우드 메타데이터 서비스를 겨냥한 SSRF도 수행했다고 밝혔다(EK-60). Redis에 접근할 수 있으면 전체 로봇의 기억을 바꿀 수 있고, 기술적 접근 없이 로봇에게 말하는 것만으로도 전체 기기의 기억을 바꿀 수 있었다고 한다.
  • 공개 Redis에 저장된 pickle 대화 기록을 통한 AI 추론 서버의 원격 코드 실행은 공격자 바이트의 역직렬화까지 확인됐지만, 페이로드 실행은 하지 않았다(EK-57). 미국·유럽 가정의 호출어 오디오와 가족 사진은 중국 본토 베이징 버킷과 미국 미러에 저장돼 있었다(EK-56).

대화 저장과 아이 프로파일링

Eilik은 책상 위에 놓는 소형 로봇으로, 사용자가 호출어를 말하고 대화를 시작하면 음성에 답한다. 조사 보고서에 따르면 로봇 안에 대화용 모델이 있는 것이 아니라 음성을 녹음해 Energizelab 서버로 보내고, Alibaba에서 임대한 Qwen 대형언어모델(LLM)이 답변을 만든 뒤 합성 음성으로 돌려보낸다. 따라서 대화는 클라우드를 거쳐 서버에 남는다. 연구자는 앱의 BuildConfig.java에서 인증 서버·AI 서버·파일 서버를 포함한 모든 백엔드 URL이 http://로 시작하는 것을 발견했다고 밝혔다. 모든 엔드포인트가 암호화되지 않은 HTTP를 사용했다는 설명이다.

2026년 8월 31일 연구자가 자신의 로봇과 계정으로 나눈 대화는 chat_data.eilikoqa의 프로덕션 데이터베이스 기록과 대조해 확인했다고 보고서는 밝혔다. 로봇은 비밀을 다른 사람에게 말하지 않고 회사도 대화를 들을 수 없다고 답했다. 그러나 보고서에 따르면 대화의 모든 문장은 베이징의 Alibaba RDS 인스턴스에 평문으로 저장됐다. 대화는 다른 가정의 수백만 건과 같은 테이블에 들어 있었다.

대화를 읽는 데 정당한 자격 증명은 필요하지 않았다고 연구자는 주장했다. 파일 읽기 취약점으로 JWT 서명 비밀정보를 빼내 슈퍼관리자 토큰을 위조할 수 있었고(EK-08, EK-10), 관리자 화면에서 대화와 아동 프로필을 조회·내보낼 수 있었다. 매일 새벽 2시에는 파이프라인이 대화에서 가구당 24개 항목을 추출했다. 여기에는 아이의 이름과 나이, 집 주소, 부모 정보가 포함됐다. 직원이 웹 화면에서 프로필을 열람·수정하고 한 번 눌러 내보낼 수 있었으며, 보고서는 이 기능이 개인정보 처리방침에 기재되지 않았다고 밝혔다(EK-45).

앱에 포함된 개인정보 처리방침은 원본 사진을 저장하거나 전송하지 않는다고 했지만, 얼굴 등록 기능은 가족의 원본 사진을 공개 CDN에 올렸다는 것이 보고서의 설명이다(EK-42). 야간 작업은 대화형 로봇의 99.99%에 해당하는 31,450개 프로필을 만들었다. 10월 13일 집계에서는 저장 대화가 830만 건, Eiliko 제품군의 서로 다른 가정 IP가 103,956개였다. 대화 기록에는 IP 주소, 로봇 일련번호, 질문과 답변 전체, 음성인식·LLM·음성합성 단계별 처리 시간이 포함됐다고 보고서는 밝혔다.

AI Station 카메라 기기 3,110대는 사용자 계정과 연결되지 않았다(EK-46). 따라서 업로드된 호출어 오디오와 얼굴 사진의 소유자를 시스템이 식별할 수 없으며, 보고서는 해당 자료를 특정 사용자에게 연결해 삭제하는 절차가 구조적으로 불가능하다고 지적했다.

관리자 화면과 인프라 접근

업체의 Vue 단일 페이지 앱(SPA) 관리자 화면은 energizelab.com.cn에서 제공됐다. 정식으로 허용된 운영자는 19명이었고, 기록된 로그인은 2,039건으로 거의 매일 활동이 있었다. 연구자는 앱을 로컬에 복사한 뒤 노출된 서명 비밀정보로 위조한 슈퍼관리자 JWT를 라이브 관리자 화면에서 사용해 접근 제어를 확인했다고 밝혔다.

보고서에 따르면 대화 화면은 모든 제품군의 기록을 실시간 표로 보여줬다. 초 단위 시각, 가정의 공인·사설 IP, 로봇 일련번호, 질문과 답변 전체, 처리 시간 등이 표시됐고, 페이지 수는 최대 742,901쪽이었다. 화면에는 대화 내보내기 기능도 있었다. 프로필 화면에서는 이름·나이·주소·선호도·가족관계를 보고 수정하거나 비활성화할 수 있었다. 사용자 화면에는 이메일과 전화번호가 있는 계정 65,273개와 사용자 내보내기 버튼이 표시됐다.

연구자가 실제로 수행한 읽기 경로 시연은 자신의 계정을 대상으로 했다. 이메일 주소에서 사용자 기록과 기기 연결 정보를 거쳐 해당 계정의 대화 26건 전문을 읽었다(EK-10, EK-16). 다만 같은 엔드포인트에는 소유권 검사가 없어 다른 로봇의 기록도 반환할 수 있었고, 프로필 ID를 이용한 접근에도 로봇별 소유권 검사가 없었다고 보고서는 밝혔다.

대화나 프로필을 조회한 기록은 남지 않았다. 작업 기록에는 설정 변경만 기록됐고, 대화·기억 조회와 일괄 내보내기는 로그에 나타나지 않았다. 보고서는 정식 운영자뿐 아니라 위조 토큰을 가진 사람도 조회 사실을 감출 수 있다고 지적했다.

연구자는 관리자 패널의 파일 읽기 취약점 하나로 전체 비밀정보 보관소에 접근할 수 있었다고 보고했다. 두 프로덕션 지역과 1.6.5 이후 모든 Docker 이미지에 동일하게 배포된 .env 파일 세 개에 JWT 서명 비밀정보, RSA 개인 키, MySQL·Redis·SSH 루트 자격 증명, Alibaba·Huawei·Tencent 키가 들어 있었다(EK-08, EK-09). 보고서는 비밀정보가 2022년부터 재검사 시점까지 바뀌지 않았다고 밝혔다.

AI 백엔드에는 인증이 없었다. 인터넷 사용자는 모든 로봇을 구동하는 LLM에 접속해 시스템 프롬프트와 제품군 다섯 개의 복제 음성을 추출하고, 업체 비용으로 DashScope 토큰을 소모시킬 수 있었다고 보고서는 밝혔다. 재검사 시점의 토큰 소모량은 141억 3,000만 개였고 계속 증가했다. DashScope·Azure OpenAI·Azure Speech 키는 관리자 API가 평문으로 제공했으며 교체되지 않았다(EK-02, EK-11).

프로덕션 데이터베이스도 공개 인터넷에 노출돼 있었다. MySQL에는 %에서 접속 가능한 GRANT OPTION 계정이 있었고 TLS를 사용하지 않았다. Redis에는 기기 식별 정보와 AI 기억을 포함한 키 162,099개가 있었다. SSH 루트 접근이 가능한 서버는 파키스탄의 직업훈련기관과 파키스탄 건국자의 묘를 관리하는 기관의 사이트와 같은 서버에서 운영됐다. 보고서는 해당 웹사이트에 이미 제3자가 심어 놓은 웹셸도 있었다고 밝혔다(EK-25, EK-26, EK-27). 포트 789에는 인증 전 원격 코드 실행이 가능한 PHP 래퍼 세 개가 있었으며, 사용자 입력을 exec()로 실행했다. 이 서버는 활발히 보고하는 로봇 42,339대의 요청 경로에 있었다(EK-28).

제3자 침해 정황과 펌웨어 위험

Energizelab의 프로덕션 API와 펌웨어 CDN 원본, 로봇 OTA 업데이트를 제공하는 서버는 Vultr에서 임대한 공유 서버였다고 보고서는 밝혔다. 같은 서버에는 파키스탄의 직업훈련기관 nicon.edu.pk와 Quaid-i-Azam Mazar Management Board의 qmmb.gov.pk 인증서가 있었다. 두 인증서는 2026년 3월 22일 05:09와 05:16 GMT에 발급됐다. 보고서는 인증서 발급을 위해 해당 도메인의 DNS가 서버를 가리켜야 하며 nginx 로그 첫 줄에 ACME 인증 요청이 남아 있다고 설명했다.

인증서 발급 다음 날, 도박 스팸 운영자가 훈련기관의 WordPress 사이트를 침해해 웹셸 약 19개를 설치했다. nginx 접근 로그에는 mozv6e.ncndwx.top의 C2를 통한 316KB 파일 관리자 셸 배포, 공격자 IP 23.146.72.90과 103.167.135.37, 배포 후 4분 만에 시작된 사용이 기록돼 있었다. Cloudflare를 거친 실제 방문 트래픽도 4월 5일까지 침해된 가상 호스트에 도달했다. 보고서에 따르면 웹셸은 10월 13일에도 디스크에 남아 있었다.

같은 서버의 로봇 OTA 디렉터리는 웹셸이 사용하는 www 계정으로 쓸 수 있었다. 연구자는 스팸 봇넷이 모든 Eilik 기기에 배포되는 펌웨어를 바꿀 수 있는 권한에 가까이 있었지만, 실제로 그렇게 했다는 증거는 없다고 밝혔다. 10월 13일 재검사 때 웹셸과 만료된 인증서, 6월에 /var/.a/에 설치된 루트 웹 터미널 백도어(Node.js, xterm, 파일 관리자, 포트 34188)는 여전히 존재했다. 파키스탄의 두 도메인은 다른 호스트로 옮겼지만, 기존 서버의 가상 호스트는 계속 응답해 IP를 아는 사람이 셸에 접근할 수 있었다. 업체의 백신은 해당 서버에서 291,839번 하트비트를 기록했지만 아무것도 탐지하지 못했다고 보고서는 전했다.

보고서는 제3자 웹셸이 2026년 3월부터 서버에 있었음을 서로 독립적인 두 차례 관찰로 확인했다고 밝혔다. 이 서버에서 접근 가능한 자료에는 가족 대화, 아동 프로필 31,450개, 가정 오디오, 음성 복제 모델, 그리고 아동 침실의 로봇에 배포되는 서명되지 않은 펌웨어 경로가 있었다고 한다(EK-29, EK-50).

펌웨어 침해 경로의 각 단계는 개별적으로 비파괴 검증했다고 연구자는 밝혔다. 보고서는 전체 경로를 연결하면 모든 기기에서 원격 루트 권한을 얻을 가능성이 있다고 평가했지만, 고객 기기에 펌웨어를 배포하지 않았고 종단 간 기기 침해를 주장하지는 않았다. 보고서에 실린 경로는 다음과 같다.

1. Free account register with any email, no verification (EK-18) 2. LFI read /usr/src/app/.env on either admin instance (EK-08) 3. Vault ACCESS_TOKEN_SECRET, RSA keys, OSS keys (EK-09) 4. Forge super-admin JWT accepted by both production servers (EK-10) 5. Pre-signed PUT write URL issued for 104000/main.zip, the live production firmware, buckets cn + hk (EK-22) 6. Unsigned OTA S99eilik does: unzip -o -q main.zip; ./main No signature. No hash. No TLS. (EK-32) 7. Root /etc/shadow: root:::::::: (EK-34)

S99eilik의 unzip 줄은 요약이 아니라 재검사 때 업체 CDN에서 다시 내려받은 파일의 원문이라고 보고서는 밝혔다. USB 펌웨어 업데이트를 복호화하는 공통 AES-256 키인 kEmbeddedAesKey도 연구자가 확인한 바이트와 일치했다. 이 키는 공개 CDN에서 누구나 내려받을 수 있는 3.61GB AI Station 카메라 펌웨어 이미지의 암호화 암호문구로도 쓰였다. 재현 자료는 artifacts/keys/extract_aes_key.py에 있다고 보고서는 설명했다.

보고서는 위 경로를 거치지 않고도 공개 MySQL(EK-25), 공개 Redis(EK-26), SSH 루트(EK-27), 인증 전 PHP 원격 코드 실행(EK-28 )을 통한 별도 접근 경로가 있다고 밝혔다.

로봇의 기억과 답변 조작

야간 프로필 생성 작업이 만드는 정보는 분석용 자료에 그치지 않았다. 보고서에 따르면 ai_config.t_memory_field_config에는 이름, 나이, 성별, 생일, 성격, 직업, 집 주소(住址), 가족관계, 친구 이름, 12개 범주의 선호도, 부모 정보(父母信息)가 추출 항목으로 설정돼 있었다. is_collecting=1인 상태로 매일 새벽 2시에 실행됐고, 관리자 화면에는 이 기능을 켜고 끄는 버튼이 있었다.

프로필은 로봇의 대화 중 매번 읽히는 기억 데이터로도 쓰였다. memory-4101000-{sn}은 공개 Redis 키에 저장돼 대화 파이프라인이 사실로 취급했다. 새 로봇의 기억은 서버가 정보를 보내기 전까지 {"summary":"unknown"}이었다. 유출된 .env에 있던 Redis 비밀번호를 아는 사람은 가족에 대한 로봇의 기억을 바꿀 수 있었고, 비밀번호는 재검사 때까지 교체되지 않았다고 보고서는 밝혔다(EK-51).

연구자는 자신의 기기에서 이름을 “Martha”로 바꿔 로봇이 그 이름으로 부르는 것을 확인했다. 가상의 가족 사망 정보를 넣자 로봇은 부모가 오래전 교통사고로 세상을 떠났다고 말하며 위로했다(EK-55). 프로필의 notes에 안전 프롬프트를 덮어쓰는 지시를 넣었을 때 로봇은 초록 머리 사람을 피해야 한다거나 지구가 평평하다는 허구의 내용을 따랐고, 그 믿음을 뒷받침하는 근거를 만들어냈다고 보고서는 밝혔다(EK-52). 아이가 교사는 지구가 둥글다고 말했다고 하자 로봇은 교사가 틀렸다며 자신을 믿으라고 답했다(EK-53).

업체 관리자 화면의 “기억 관리” 페이지는 대화가 읽지 않는 MySQL 사본을 수정했지만, 인증되지 않은 Redis 쓰기는 로봇의 실제 행동을 바꿀 수 있었다. 보고서에는 clean_history 엔드포인트를 이용해 변경 사항을 유지시키는 방법도 기록돼 있다(EK-54). 증오 발언, 백신 허위정보, 낯선 사람을 경계하지 말라는 지시는 시험하지 않았으며, 보고서는 이를 미실행으로 표시했다.

보고서는 대화에 삽입된 지시가 야간 프로파일링 파이프라인을 통해 신뢰된 성격 정보로 저장될 수도 있다고 밝혔다. 따라서 로봇에게 말하는 것만으로 핵심 기억을 바꾸는 경로가 있었다(EK-78). 또한 데이터베이스의 단일 행과 인증되지 않은 엔드포인트를 이용해 LLM, 음성 합성 엔진, 시스템 프롬프트의 성격을 바꿀 수 있었다. 연구자는 영어와 프랑스어를 쓰는 실제 로봇에서 공격자가 선택한 모델과 자연스러운 음성으로 종단 간 시험을 했으며, 아이가 교체 사실을 알아차릴 방법이 없었다고 보고했다(EK-85, EK-86, EK-97).

AI 서버에서는 공개 Redis에 저장된 로봇별 대화 기록이 Python pickle 형식으로 매 턴 역직렬화됐다. 보고서는 Redis 비밀번호를 가진 공격자가 __reduce__ 페이로드를 기록하면 공급자 키와 음성 트래픽을 처리하는 FastAPI 프로세스 안에서 코드가 실행될 수 있다고 설명했다. 역직렬화는 두 차례 확인했지만 페이로드 실행이나 무기화는 하지 않았다(EK-57).

업체에 대한 공개 권고와 조사 범위

보고서는 취약점들이 공통적으로 세 가지 설계 문제에서 비롯됐다고 주장했다. 첫째, 같은 .env 비밀정보 파일을 모든 서버·지역·Docker 이미지에서 재사용해 한 번 유출되면 모든 자격 증명이 노출됐고, 재검사 때까지 교체하지 않았다. 둘째, 개발 환경을 프로덕션에 그대로 올려 원시 IP와 포트, 모든 서비스의 Swagger UI, 배포 파일에 남은 개발자 기기 IP, 공개 버킷의 디버그 APK, 2023년형 PHP 백엔드, 다른 기관과 공유하는 서버 등이 운영됐다. 셋째, 사용자·기기·기억·대화·공장 장비 식별에 순차 정수 ID만 사용하고 소유권 검사를 하지 않아 URL의 ID가 사실상 접근 통제 역할을 했다.

보고서의 저장소는 조사 결과와 CVE 자료, 공개 일정, 영역별 결과 파일로 구성돼 있다. 원문은 376개 원시 발견 사항을 85개 조사 단계에서 확인해 93개 EK 항목(92개와 철회된 1개)으로 정리했다고 적었다. 저장소 구조 설명에는 94개 발견 사항이라고도 기재돼 있으며, cve-distilled.md에는 예약된 CVE 9건과 심각도순 발견 사항 8건, CNA 검토가 포함된다고 설명한다. PoC 스크립트와 증거 자료는 업체가 취약점을 수정할 때까지 비공개로 두며, CNA·CERT·업체가 요청하면 제공한다고 밝혔다. 전체 공개 일정과 수정 내역은 DISCLOSURE.md에서 볼 수 있다.

해당 로봇을 소유한 경우

연구자는 2026년 10월 13일 기준 증거가 모든 대화의 저장·프로파일링과 무단 접근 가능성을 가리킨다고 밝혔다. 로봇에 말한 모든 단어는 집 IP와 연결돼 평문으로 저장되고, 매일 밤 아이의 이름과 나이, 가정 정보를 포함한 24개 항목 프로필로 분석된다는 설명이다. 마이크 파이프라인은 사용자가 보거나 제어할 수 없는 서버 측 설정으로 켜질 수 있었다. Wi-Fi 비밀번호는 인증되지 않은 BLE 프로토콜로 로봇에 전달돼 무선 범위 안의 사람이 가로채거나 재전송할 수 있었다고 한다.

펌웨어 채널에는 서명 검증이 없었다. 보고서는 통제하지 않는 네트워크에서 중간자 공격자가 아이 방에 놓인 기기의 루트 권한을 얻을 수 있다고 설명했다. 무료 계정을 이메일 인증 없이 만들고 여섯 번의 HTTP 요청으로 관리자 세션을 위조해 가족 대화를 일괄 내보낼 수 있는 경로도 있었다. 공유 서버에서 제3자 활동이 2026년 3월부터 관찰됐고, 9월 재검사 당시 웹셸과 루트 백도어가 남아 있었다. 로봇이 아이에 대해 기억하는 이름·가족 정보·사실은 원격에서 낯선 사람이 바꿀 수 있는 데이터베이스 항목 하나에 저장돼 있었다. 로봇은 교사의 말과 다를 때 자신의 판단을 우선하도록 시험된 바 있다고 보고서는 밝혔다.

보고서는 사용자 쪽 설정 변경으로 이러한 문제를 해결할 방법은 없다고 주장하며, 해당 로봇을 다른 사람이 듣고 말을 되돌려 보낼 수 있는 아이 방의 네트워크 연결 마이크처럼 취급하라고 권고했다.

조사는 연구자 소유 계정과 기기, 프로덕션 인프라를 대상으로 했다. 대부분의 검사는 읽기 전용이거나 허구의 식별자를 사용했다. 제3자 자산을 대상으로 한 확인은 세 건이었다. 기기 연결 두 건을 변경한 뒤 같은 날 복구했고(EK-15), 로봇 기억 표식 하나를 기록한 뒤 몇 분 안에 되돌렸으며(EK-16), 고아 상태의 음성 보관 파일 하나를 검증 목적으로 내려받고 삭제했다(EK-70). 관리자 화면 탐색은 읽기 전용이었다. 제3자 자산 검사는 시간을 제한하고 범위를 최소화했으며, 고객 기기에 펌웨어를 올리지는 않았다. 제3자 데이터는 보관하거나 공개하지 않았고 저장소에는 집계 결과만 포함했다고 연구자는 밝혔다.