TL; DR
nolimit-agent npm 패키지이며, 게시된 버전은 다음과 같습니다. 1.0.299 통해 1.0.3072026년 6월 26일부터 2026년 6월 29일까지 4일 동안 출시되었으며, 각각은 다음을 포함합니다. 완벽한 피싱 및 대량 메일 프레임워크 완전히 난독화된 숨겨진 디렉터리 내부에 있습니다. 모든 버전에서 기본 항목은 다음으로 해석됩니다. .ad/x0.js이는 dotfile로 명명된 폴더에 있는 약 86개의 파일 중 하나이며, 이 폴더에는 약 4,200개의 자바스크립트 난독화 문자열 배열이 들어 있습니다. 설치 후크와 진입점 레이아웃은 모든 줄에서 동일합니다.
모호함 뒤에는 무언가가 숨어 있다. Microsoft 365 OAuth 장치 코드 흐름 (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode이 시스템은 코드가 승인되면 Microsoft Graph API를 통해 피해자의 Outlook 받은 편지함과 보낸 항목을 읽고, 통신 사업자가 제공한 수신자 목록을 기반으로 대량 SMTP 및 SMS를 전송하며, 브랜드 사칭 메시지 템플릿을 사용하고, 오픈 리다이렉트 링크를 구축하고, DNS-over-HTTPS, WHOIS 및 GitHub 코드 검색을 통해 정찰 활동을 수행합니다. 또한, 런타임 트래픽 비콘은 통신 사업자 인프라에 전송됩니다. api[.]nolimitent[.]xyz:4100.
영향을 받는 사용자: 해당 패키지의 어떤 버전을 설치하든 모든 사용자 Microsoft 365 사서함 소유자가 해당 장치를 통해 제시된 장치 코드를 승인합니다. 최신 버전, 1.0.307현재 최신 태그이며 동일한 장치 코드 메일박스 기능을 가지고 있습니다. 악성 코드는 이전 버전 하나에만 국한되지 않습니다.
심각도 : 임계영향을 받는 생태계: npm가장 먼저 확인해야 할 지표는 바로 호스트입니다. api[.]nolimitent[.]xyz.
공격 방식: 작동 원리
숨겨진 탑재물을 덮고 있는 무해한 껍데기
포장은 평범한 표면을 하고 있습니다. package.json 선언 설치 후 갈고리 –
text postinstall: node scripts/postinstall.js — 그리고 검사 시 scripts/postinstall.js 무해합니다. Windows 명령 shim을 설치하고 종료됩니다. 동작의 원인은 후크 때문이 아닙니다. 본관 큰 상자 필드는 둘 다 다음을 가리킵니다. .ad/첫 글자에 점이 붙어 있어 일상적인 대화에서 제외되는 디렉토리입니다. ls 출력이며, 그 내용은 모두 기계적으로 난독화되어 있습니다. 정적 스캐너는 전체 출력에서 약 4,293개의 인코딩된 페이로드 스팬을 확인했습니다. .ad/ 모듈 세트; 자바스크립트-난독화기 이는 번들 파일의 문자열 배열 회전 형태와 일치하는 선언된 개발 종속성입니다.
첫 번째로 주목할 만한 신호는 바로 분리입니다. 리뷰어가 꼼꼼히 살펴볼 설치 후크는 깔끔한 반면, 실제 작동 코드는 한 디렉토리 떨어진 곳에 숨겨져 있고 난독화되어 있으며, 패키지에서 내보낸 진입점이 실행될 때만 접근할 수 있습니다.
Microsoft 365 장치 코드 사서함 액세스
모듈 .ad/x12.js 이 프레임워크의 가장 중요한 기능을 담당합니다. Microsoft 365 OAuth 2.0 장치 인증 부여를 지원합니다.
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode 장치 코드 부여는 입력이 제한된 장치를 위해 설계된 마이크로소프트의 정식 워크플로입니다. 서비스가 코드를 요청하면 사용자가 해당 코드를 입력합니다. microsoft.com/devicelogin두 번째 기기에서 `를 실행하고 승인하면 요청 서비스는 토큰을 받습니다. 요청 서비스가 사서함 소유자가 아닌 다른 사람에게 속한 경우, 승인이 완료되면 해당 제3자에게 토큰이 부여됩니다. 토큰을 획득하면, `.ad/x12.js`는 Microsoft Graph를 통해 사서함을 직접 읽습니다.
text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients The $선택 예측 기능은 받은 편지함에서 발신자 주소를, 보낸 편지함에서 수신자 주소를 가져와 피해자의 연락처를 파악하는 데 필요한 원자재를 제공합니다. 이는 비밀번호 탈취가 아닌 동의를 통한 중간자 공격(AiTM) 방식입니다. 즉, 기존 방식의 피싱 공격에 필요한 자격 증명이 아니라 승인을 위한 코드만 있으면 됩니다.
사칭 템플릿을 포함한 대량 메일 및 SMS 발송 엔진
사서함 접근 주변에는 메일 발송기가 있습니다. 패키지에는 운영자가 편집할 수 있는 데이터 파일(발신자 목록 등)이 포함되어 있습니다.senders.txt, smtps.txt) 및 템플릿 파일(functions.txt) — 주소 자리 표시자는 마치 사칭 캐스팅 시트처럼 보입니다: security@apple.com, login-인증, OAuth 서비스, 청구 및 계정 알림 발신자에 대한 yourdomain.com 대리인이 운영자를 대신합니다. SMS 측에서는 전화 통화를 지원합니다.ebook 및 게이트웨이 구성. 메일 발송기는 운영자가 제공한 수신자 목록을 순회하며 구성된 SMTP 릴레이를 통해 메일을 전송합니다.
링크가 제대로 작동하도록 하려면, .ad/xu.js .ad/xq.js URL 구문 분석의 모호성과 클릭 추적을 악용하는 URL을 구축하세요. 이러한 스푸핑 패턴은 실제 URL 앞에 신뢰할 수 있는 것처럼 보이는 기관을 삽입합니다. @ 따라서 보이는 접두사가 실제 호스트와 다릅니다.
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? 이 프레임워크는 주요 소비자 및 웹사이트의 파비콘도 수집합니다. enterprise 메일 제공업체 — 제공업체 브랜드가 적용된 설득력 있는 안내 메시지 또는 랜딩 페이지를 표시하는 일반적인 기법입니다.
목표 및 기반 시설 정찰
여러 모듈이 전송 전에 컨텍스트 정보를 수집합니다. .ad/x0.js DNS-over-HTTPS를 통해 이름을 확인합니다.dns[.]google/resolve), .ad/xa.js WHOIS 조회 (api[.]whois[.]vu), 그리고 .ad/x9.js GitHub 코드 검색을 실행합니다(api[.]github[.]com/search/code?q=) — 이는 노출된 메일 서버 구성 및 SMTP 자격 증명을 발견하여 릴레이 목록에 추가하는 것과 일관된 패턴입니다. .ad/xs.js Wayback Machine의 CDX 인덱스를 조회합니다.
명령 및 제어
모호하게 처리된 전체 집합에서, .ad/x4.js 운영자 엔드포인트를 참조합니다.
text http://api[.]nolimitent[.]xyz:4100 호스트가 공유합니다 제한 없음 출판사 자체의 이름을 딴 브랜드, 그리고 : 4100 포트는 프레임워크의 콜홈 채널입니다. 이는 보안 담당자에게 가장 확실한 지표입니다. 패키지, 개발자 워크스테이션 또는 빌드 에이전트가 해당 포트에 도달하는 것을 의미합니다. 포트는 프레임워크의 콜홈 채널 역할을 합니다. 이는 보안 담당자가 식별할 수 있는 가장 확실한 지표입니다. 즉, 패키지, 개발자 워크스테이션 또는 빌드 에이전트가 해당 포트에 도달하는 것을 나타냅니다. api[.]nolimitent[.]xyz 이 코드를 실행했습니다.
타협의 지표
아래 지표는 방어자가 조치를 취할 수 있는 항목입니다. 잠금 파일을 검색하거나, 호스트를 차단하거나, 프록시 및 DNS 로그를 검색할 수 있습니다. Microsoft 엔드포인트가 표시되는 이유는 프레임워크가 이를 악용하기 때문이며, 그 자체는 악의적인 것이 아니므로 차단해서는 안 됩니다.
| 지시자 | 타입 | 어디에 | 수비수 행동 |
|---|---|---|---|
nolimit-agent (모든 버전 1.0.299~1.0.307) | 묶음 | npm | 잠금 파일/설치 로그를 검색합니다. |
api[.]nolimitent[.]xyz (:4100) | C2 호스트 | .ad/x4.js | 차단; DNS 및 프록시 로그 검색 |
.ad/ 숨겨진 디렉터리를 main/bin 대상으로 지정 | Structure | package.json | 레지스트리 검토의 정적 신호 |
trusted[.]com@ / %40 / :80@ 링크 양식 | URL 스푸핑 | .ad/xu.js, .ad/xq.js | 메일/프록시 URL 검사 |
장치 코드 권한 부여 + 그래프 inbox/sentitems 읽기 | 행동 | .ad/x12.js | M365 로그인 + 그래프 감사 검토 |
초기 진단 시 캡처된 파일 해시:
- package/.ad/x0.js — 샤256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- 패키지/패키지.json — 샤256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
이 패키지와는 별개로 살펴볼 가치가 있는 Microsoft 365 테넌트 신호는 다음과 같습니다. 장치 코드 로그인 성공 후 곧바로 Graph에서 읽기가 이루어지는 경우입니다. 메일 폴더/받은편지함 메일 폴더/감정 항목특히 사용자가 인식하지 못하는 세션에서 발생할 경우 더욱 그렇습니다.
귀인 및 관찰된 행동
관찰 가능한 것은 그것을 누가 했는지와 분리되어 있습니다.
관찰 가능한 사실: 해당 패키지는 다음 핸들로 게시되었습니다. 제한 없음 에이전트 인증되지 않은 Gmail 주소와 연결된 소스 저장소가 없습니다. package.json 이를 "고급 이메일 발송 도구"라고 설명하고 다음과 같은 태그를 지정합니다. 레드팀 키워드; 런타임 코드는 숨겨진 난독화된 영역에 집중되어 있습니다. .ad/ 툴체인이 포함된 디렉토리(자바스크립트-난독화기)는 선언된 종속성입니다. 그리고 콜홈 호스트 api[.]nolimitent[.]xyz 재사용합니다 제한 없음 브랜드입니다. 이는 운영자가 제어하는 하나의 인프라 랜드마크를 포함하는 단일 패키지이며, 여러 패키지가 묶인 클러스터가 아니며, 이전에 명명된 캠페인과의 중복도 확인되지 않았습니다.
The 레드팀 키워드는 분류를 변경하지 않습니다. 이중 용도 기능을 제공하는 합법적인 공격/보안 도구는 소스 코드를 읽을 수 있고, 운영자가 제공하는 대상을 사용하며, 숨겨진 콜홈 기능을 제공하지 않는 등 투명하게 작동합니다. 그러나 이 패키지는 이러한 속성을 모두 뒤집습니다. 운영 코드가 난독화되어 숨겨져 있고, 사용자가 제공하는 대상이 아닌 고정된 운영자 인프라로 신호를 보냅니다. 따라서 분류가 아닌 동작이 판단 기준이 되며, 악성으로 간주됩니다.
이 글에서는 의도가 명확하게 제시되지 않았습니다. 게시글은 코드의 동작 방식(장치 코드 요청, Graph를 통한 메일함 읽기, 구성된 릴레이를 통한 대량 메일 전송, 고정 호스트로 비콘 전송 등)을 설명할 뿐, 동기는 언급하지 않았습니다.
영향, 트렌드 및 수비수 가이드
설치 시 두 가지 중요한 영향이 있습니다. 첫째, 설치하는 모든 개발자 또는 CI 에이전트가 영향을 받습니다. 제한 없음 에이전트 해당 호스트에 프레임워크를 가져오고 콜홈을 설정합니다. api[.]nolimitent[.]xyz둘째, 장치 코드 기능은 설치 호스트를 넘어 그 범위를 확장합니다. 소유자가 제시된 코드를 승인하도록 유도된 Microsoft 365 사서함은 암호가 전송되지 않고 Graph를 통해 직접 읽을 수 있습니다.
더 광범위한 추세는 내부화입니다. 디바이스 코드(AiTM) 피싱은 독립형 피싱 인프라에서 공개 레지스트리에 등록된 패키지 형태로 확산되었습니다. npm 설치 이메일 링크를 보내는 방식이 아니라, 이러한 방식으로 키트를 패키징하면 피싱 운영자의 호스팅 및 링크 전달 문제를 레지스트리의 도달 범위로 대체하고, 운영 코드는 깔끔한 설치 후크와 점으로 이름이 지정된 난독화 디렉터리 뒤에 숨겨져 있어 수동으로 빠르게 훑어보기 어렵게 만듭니다.
수비수들을 위한 팁:
- 레지스트리 및 종속성 검토. 다음 패키지를 처리하세요: 본관/큰 상자 구조적인 측면만으로도 위험도가 높다고 판단되어 (점으로 시작하는) 숨겨진 디렉터리에 균일하게 난독화된 자사 코드들이 포함되어 있는 것으로 해석됩니다. 이는 설치 후크가 깔끔해 보이는지 여부와는 무관합니다. 코드 축소는 난독화와는 다릅니다. 줄 길이가 아니라 문자열 배열 디코더의 서명을 기준으로 판단하십시오.
- Microsoft 365 보안 강화. 운영상 필요하지 않은 경우 조건부 액세스를 통해 장치 코드 인증 흐름을 제한하십시오. 장치 코드 권한 부여는 알려진 AiTM 공격 경로이며 대화형 사용자에게는 거의 필요하지 않습니다. 장치 코드 로그인에 대한 감사를 수행한 후 즉시 Graph 사서함 열거를 실행하십시오.
- 네트워크 감지. 차단 및 알림 설정 api[.]nolimitent[.]xyz개발 및 빌드 인프라 전반에서 아웃바운드 DNS 및 프록시 로그를 검색하여 해당 문제를 찾아보세요.
- 메일 경로 감지. The 사용자@호스트 URL 스푸핑 양식(trusted[.]com@…메일 게이트웨이 및 프록시에서 감지 가능하며, 권한 구성 요소가 앞에 오는 링크에 플래그를 지정합니다. @.
분석 당시 해당 패키지는 npm에 게시되어 있었습니다. 숨겨진 프레임워크가 게시된 전체 버전 라인과 현재 버전에 걸쳐 있기 때문입니다. 최근 태그(1.0.307)에는 장치 코드 기능이 포함되어 있으므로 레지스트리 삭제는 단일 이전 버전이 아닌 모든 버전을 포함해야 합니다.




