NPM 사용 중인 개발자 노리는 가짜 패키지
- 유명 왓츠앱의 비공식 API인 베일리즈
- 이 베일리즈의 포트 중 하나로 위장된 로터스베일
- 로터스베일, 사실은 각종 민감 정보 훔치는 멀웨어
악성 패키지가 공공 리포지터리인 NPM에서 발견됐다. 크리덴셜 및 각종 데이터를 훔치는 기능을 내포하고 있는 이 패키지의 이름은 로터스베일(Lotusbail)이며, 이미 널리 사용되고 있는 유명 패키지인 베일리즈(Baileys)의 포크다. 베일리즈는 ‘세계의 카카오톡’인 왓츠앱과 관련된 비공식 API 라이브러리라는 점 때문에 파급력이 크다고 할 수 있다.
베일리즈와 로터스베일
로터스베일을 먼저 발견한 보안 기업 코이시큐리티(Koi Security)는 “베일리즈는 인기가 많은 편인데다가 원래 포크가 많기도 해서 개발자들이 ‘로터스베일 포크’에 대한 경계심이 그리 높지 않다”고 설명한다. “또한 왓츠앱이 공식 API를 엄격해 통제하기도 합니다. 비공식 클라이언트는 자주 차단하고 프로토콜을 자주 변경하기도 하지요. 그래서 개발자들은 이런 조치들을 피하기 위해 포크를 자주 만드는 편입니다. 로터스베일도 그런 포크 중 하나라고 받아들일 수밖에 없는 맥락이지요.”
이런 ‘숨기 좋은 환경’ 덕분인지 로터스베일은 이미 6개월 넘게 배포돼 왔다고 코이시큐리티는 설명한다. “그 기간 동안 5만6천 회 이상 다운로드 되었습니다. 왓츠앱 메시지의 송수신을 지원하는 기능을 가지고 있으며, 모든 왓츠앱 메시지들이 제일 먼저 이 패키지들을 통과하도록 되어 있습니다. 이러한 구조 덕분에 공격자는 정보를 은밀하게 수집할 수 있습니다.”
은밀히 정보를 빼돌리는 로터스베일이지만, 그런 악성 기능만 가지고 있는 건 아니다. 정상적으로 작동하는 왓츠앱 API로서의 기능들도 탑재돼 있다. 그래서 개발자들은 더더욱 의심하기가 힘들다고 코이시큐리티는 강조한다. “로터스베일은 베일리즈의 포크인 척 흉내만 내지 않습니다. 실제로 베일리즈를 기반으로 만들어져 있습니다.”
또한 로터스베일은 훔친 데이터를 RSA 알고리즘으로 암호화 하는 과정부터 진행한다. 게다가 로터스베일과 연결돼 있는 서버의 정보는 난독화 되어 있기도 하다. “이런 장치들도 로터스베일에 수상한 장치들이 있다는 걸 숨기는 데 큰 역할을 합니다.”
로터스베일에 당하면 어떤 피해 입나?
로터스베일에 당하면 무슨 일이 일어날까? 먼저 로터스베일이 NPM 패키지로서 유포됐다는 건, 피해자가 대부분 개발자라는 의미다. 개발자가 사용하는 왓츠앱 메시지를 중간에서 가로챌 수 있는 로터스베일에 감염될 경우, 개발과 관련된 여러 민감 정보가 공격자의 손에 넘어갈 수밖에 없다. 소프트웨어가 중시되는 시기에 개발자가 다루는 정보의 중요도가 매우 높다는 걸 감안하면, 이는 중대한 피해가 아닐 수 없다.
“하지만 가장 심각한 건 공격자가 피해자의 왓츠앱 계정을 완전히 탈취할 수 있게 된다는 겁니다. 큐알코드를 통해 사용자의 왓츠앱 계정과 장비가 페어링 되는 게 왓츠앱의 특성 중 하나인데, 로터스베일이 이 과정을 공략하기도 합니다. 즉, 공격자가 자신이 지정한 장비를 통해 아주 자연스럽게 피해자 계정으로 로그인 할 수 있게 된다는 뜻이지요.” 코이 측의 설명이다.
이는 공격자가 피해자의 모든 과거 메시지를 읽을 수 있게 될 뿐만 아니라, 피해자가 주고 받는 모든 대화를 실시간으로 파악하는 것도 가능하다는 뜻이 된다. 왓츠앱을 통해 교환되는 음성, 영상, 이미지 파일들 모두 가로챌 수 있다. 연락처 정보에 접근하는 것도 가능하다. 사실상 왓츠앱 계정 소유권을 피해자와 공격자가 공유하는 것과 같은 상태가 된다고 결론을 내릴 수 있다.
왓츠앱 삭제하면 되나?
로터스베일의 진짜 무서운 점은 왓츠앱을 삭제해도 공격이 끝나지 않는다는 것이라고 코이시큐리티는 경고한다. “왓츠앱이 뭔가 이상하게 작동한다는 걸 눈치 챌 수도 있습니다. 상황이 심각하다고 느낄 수도 있고, 심지어 로터스베일의 존재를 파악해 패키지를 삭제할 수도 있습니다. 하지만 그렇다고 해서 상황이 종료되는 건 아닙니다. 공격자가 이미 자신의 장비를 통해 피해자 왓츠앱에 로그인을 해봤다면, 그 로그인 상태가 유지되거든요. 피해자가 자신의 왓츠앱 설정에 들어가 수동으로 모든 기계들의 로그인 현황을 확인한 뒤 일일이 로그아웃 하기 전까지는요.”
그렇기 때문에 뭔가 이상하다고 느낀 왓츠앱 사용자라면 제일 먼저 왓츠앱 모바일 앱에서 설정으로 들어가 연결된 모든 기기를 하나하나 클릭해 해제하는 작업부터 해야 한다. 그런 후에 로터스베일 패키지를 삭제하거나, 정 의심스러우면 기기 자체를 초기화 하는 것도 나쁘지 않다. 그런 후 왓츠앱을 다시 설치해 사용하는 편이 안전하다.
“기존의 보안 방법론으로는 로터스베일을 미리 잡아내지 못합니다. 예를 들어 정적 분석의 경우, 로터스베일이 정상적인 왓츠앱 API로서 기능을 하기 때문에 악성 여부를 판단하지 못합니다. 평판 조회라는 기법의 경우, 이미 로터스베일이 5만회 이상 다운로드 됐기 때문에 신뢰할 가능성이 높습니다. 그러므로 새로운 탐지 기법을 적용해야만 위험을 막을 수 있습니다.”
코이시큐리티가 말하는 ‘새로운 탐지 기법’이란, 행위 기반 분석이다. “패키지가 런타임 동안 실제로 무엇을 하는지 파악하는 게 더 중요합니다. 동적 분석을 해야 한다는 의미입니다.”
개발자들, 안전하게 NPM 사용하려면
이번 캠페인의 핵심은 개발자들이 로터스베일을 보고 수상함을 느끼기 힘들다는 데에 있다. 그렇다고 이런 악성 패키지의 존재 때문에 NPM을 사용하지 않을 수도 없는 일이다. 앞으로도 NPM을 꾸준히 이용해야 하는 개발자들은 어떤 것을 염두에 두어야 할까?
“유명 라이브러리의 포크라고 해서 신뢰하면 안 됩니다. 오히려 개발자들의 기본 디폴트 마인드는 ‘의심한다’로 조정되어야 합니다. 실제로 공격자들은 악성 요소가 최대한 눈에 덜 띄게 하기 위해 포크를 많이 만들어 활용합니다. 포크는 기본적으로 의심하면서 접근하는 게 맞습니다. 다운로드 수가 충분하다고 해서 신뢰하는 것도 위험합니다. 반드시 분리된 환경에서 다운로드 된 패키지를 ‘동적 분석’으로 파악한 뒤에 사용하는 것을 권합니다.”🆃🆃🅔
by 문가용 기자(anotherphase@thetechedge.ai)
Related Materials
- Malicious Package in lotusbail - Snyk Vulnerability DB, 2025년 (lotusbail을 악성 NPM 패키지로 분류하고, 네트워크를 통한 원격 공격·권한 불요·기밀성·무결성·가용성에 중대한 영향을 줄 수 있는 위협으로 CVSS 평가)
- NPM Package With 56K Downloads Caught Stealing WhatsApp Messages - Koi Security, 2025년 (정상 @whiskeysockets/baileys 포크로 위장해 WhatsApp Web API 라이브러리처럼 동작하면서, WebSocket 계층에서 인증 토큰·세션 키·메시지·연락처·미디어를 가로채는 공급망 공격 분석)
- Fake WhatsApp API Package on npm Steals Messages and Installs Backdoor - The Hacker News, 2025년 (lotusbail이 완전한 WhatsApp API로 동작하면서, 장치 페어링 과정에 하드코드된 코드를 주입해 공격자 디바이스를 은닉 연결하는 영구 백도어 메커니즘 설명)
- NPM package with 56,000 downloads compromises WhatsApp accounts - Security Affairs, 2025년 (lotusbail이 수만 번 다운로드되는 동안 정상 라이브러리처럼 보이도록 설계돼 정적 분석·평판 기반 탐지를 모두 우회한 점을 강조)

