공격자들은 npm 레지스트리와 그 미러를 악용해 Cloudflare 보안 인증 페이지로 위장한 악성 HTML 페이지를 호스팅한 뒤, 방문자를 자신들이 제어하는 도메인이나 원격으로 변경할 수 있는 목적지로 리디렉션합니다. 연구원들이 조사한 패키지는 설치 시 개발자의 기기를 악성 코드로 감염시키는 일반적인 npm 공급망 공격과 달리, 피싱 페이지를 위한 무료 호스팅 공간으로 사용됩니다.
보안 연구원 inf0stache는 7월에 china_airlines라는 패키지에서 가짜 Cloudflare 인증 페이지를 발견한 뒤 이 기법을 포착했습니다. IntelFusions도 같은 방식을 보고했으며, 이후 OX Security는 npm과 여러 미러에 분산된 동일한 악성 페이지가 포함된 npm 패키지 24개를 추가로 공개했습니다.
미러는 어떻게 피싱 플랫폼으로 변하는가?
BleepingComputer는 조사한 패키지 중 하나에 index.html과 package.json 파일 두 개만 포함되어 있으며, HTML 파일이 주 파일로 정의되어 있음을 확인했습니다. UNPKG 서비스가 패키지를 복제하면 공격자가 운영하는 도메인이 아니라 unpkg.com 도메인을 통해 브라우저에서 해당 파일을 직접 열 수 있습니다.
이러한 사용 방식은 악성 페이지를 더 신뢰할 수 있어 보이게 하며, 알려진 공격자 도메인을 차단하는 보안 도구를 우회하는 데 도움이 될 수 있습니다. 또한 OX Security는 공식 npm 레지스트리에서 삭제된 후에도 패키지가 미러에서 계속 제공될 수 있다고 경고했습니다.
가짜 인증과 변경 가능한 리디렉션
악성 페이지는 Cloudflare의 보안 인터페이스를 모방하고 합법적인 Turnstile 서비스를 포함하지만, 인증의 성공 또는 실패 여부와 관계없이 난독화된 JavaScript가 실행되어 리디렉션을 수행합니다. 연구원들에 따르면 7월의 이전 버전은 microcloud[.]homes로 연결되었고, 이후 8월에는 login[.]microsofte[.]live로 연결되는 사례가 나타났습니다. 보고서에 따르면 초기 리디렉션 중 일부는 합법적인 Microsoft Outlook 로그인 페이지로 이어졌지만, 이후 동일한 목적지가 가짜 로그인 페이지를 호스팅하는 데 사용될 수 있습니다.
다른 패키지들은 키-값 쌍을 저장하는 합법적인 플랫폼인 api.keyval.org를 사용하는 다른 방식을 채택했습니다. 코드는 해당 서비스에서 암호화된 값을 가져와 브라우저 내부에서 복호화한 다음 방문자를 결과 링크로 리디렉션합니다. 이를 통해 공격자는 npm 패키지를 수정하거나 다시 배포하지 않고도 목적지를 변경할 수 있습니다. OX는 조사 당시 확인된 목적지가 합법적인 ChatGPT 사이트였지만, 이후 피싱 페이지나 악성 코드 다운로드 페이지로 변경될 수 있다고 밝혔습니다. 다만 BleepingComputer가 검토한 페이지에서는 ClickFix 공격이 실행되지 않았습니다.
이 소식이 중요한 이유
여기서 실제로 달라진 점은 패키지를 설치하는 것만으로 개발자를 감염시키는 것이 아니라, 널리 사용되는 개발 인프라에 대한 신뢰를 악용해 브라우저에서 직접 표시되는 콘텐츠를 불러온다는 것입니다. 이에 따라 위험 범위는 개발팀뿐 아니라 npm 파일과 미러에 대한 직접 링크를 사용하는 사용자까지 확대됩니다. 따라서 OX Security는 npm 미러 도메인에서 직접 HTML을 요청하는 행위를 의심스러운 활동으로 취급할 것을 권고하며, 호스팅된 파일을 업데이트하지 않고도 최종 목적지가 변경될 수 있다는 점에 유의해야 한다고 밝혔습니다.