최근에 새로 Next.js로 변경한 회사 홈페이지 프로젝트와 인프라 구성을 맡고 있었는데 이상하게 모니터링 걸어놓은 회사 홈페이지가 계속 다운되는 문제가 발생했습니다. 이전에는 그런 일이 없었기 때문에 뭔가 이상함을 느껴서 로그를 확인해 봤는데...

웬 이상한 로그가 떠 있는 것이 아니겠습니까...
로그에서 발견할 수 있는 내용은 다음과 같았습니다.
- C:\lrt, C:\tmp\lrt, C:\dev\shm\lrt 같은 경로로 파일을 쓰려다 EPERM/ENOENT가 나는 시도
- ETIMEDOUT 77.110.115.3:80 같은 외부 IP로의 HTTP 연결 시도와 함께 NEXT_REDIRECT/digest 메시지, 반복되는 ReferenceError: returnNaN is not defined
찾아보니까 최근에 React 관련 취약점이 있었는데 그것은 React2Shell(CVE-2025-55182)이라는 취약점이었습니다.
이 취약점은 매우 심각한 취약점으로 발견 즉시 긴급 패치를 해야 하는 레벨로, 원격에서 별도 인증 절차 없이 HTTP를 통해 임의의 코드를 실행할 수 있는 취약점입니다.
https://www.pentasecurity.co.kr/insight/react2shell-log4j-like-vulnerability/
제2의 Log4j 사태, React2Shell 취약점
최근 React2Shell 취약점이 공개되면서, Log4j(Log4Shell) 사태가 다시 주목받고 있습니다. '로그인 없이 단 한 번의 요청만으로 서버를 장악할 수 있다'는 공통점을 가지고 있어 개발자와 보안 담당자들
www.pentasecurity.co.kr
관련 내용 링크 걸어두었습니다.
여담이지만 홈페이지가 뻗는 이유는 위와 관련된 로그가 많이 쌓이는게 원인이었습니다.
pm2 환경에서 npm run start를 하면서 로그 관련 버퍼가 차는 바람에 뻗는 것이었습니다.
취약 버전 업그레이드 하기
어쨌든 바로 수정해야 하기에 문제가 되는 버전을 업그레이드하게 되었습니다.
기존에 사용하던 버전은 다음과 같습니다.
"next": "15.5.5",
"react": "19.1.0",
"react-dom": "19.1.0",
이는 모두 취약점에 영향을 받을 수 있는 버전으로, 취약점이 패치된 버전으로 변경해야 합니다.
https://nextjs.org/blog/security-update-2025-12-11
Next.js Security Update: December 11, 2025
Two additional vulnerabilities have been identified in React Server Components. Users should upgrade to patched versions immediately.
nextjs.org

현재 프로젝트의 경우 Next.js의 버전을 15.5.5에서 15.5.9로, React 버전도 19.2.1로 업그레이드했습니다.
IDE에서도 현재 버전의 취약점을 보여주는 경우도 있으니 확인하시고 업그레이드하는 것이 좋겠습니다.
다음 명령어를 사용하면 취약점이 있는 라이브러리를 사용하고 있는지 쉽게 확인할 수 있습니다.
npx fix-react2shell-next


업그레이드 후에는 현재 영향을 주고 있는 부분이 있는지 확인해 보아야 합니다.
침해 여부 확인
네트워크 outbound 확인
netstat -ano | findstr ":80"
netstat -ano | findstr ":443"
netstat -ano | findstr ":3000"
우선, 외부로 요청을 보내는 서비스가 있는지 확인합니다.
tasklist /fi "PID eq 12345"
의심되는 서비스가 있을 경우, 자세한 서비스 정보를 확인하기 위해 위 명령어에 PID 값만 바꾸어 실행합니다.
현재 점유하고 있는 서비스가 nginx와 같이 의도적으로 실행한 서비스가 맞는지 확인합니다.
스케줄러 작업(지속성) 확인
schtasks /query /fo LIST /v | findstr /i "node"
schtasks /query /fo LIST /v | findstr /i "npm"
schtasks /query /fo LIST /v | findstr /i "next"
schtasks /query /fo LIST /v | findstr /i "powershell"
schtasks /query /fo LIST /v | findstr /i "curl"
schtasks /query /fo LIST /v | findstr /i "wget"
그다음엔 지속적으로 요청을 하고 있는 작업이 있는지 확인합니다.
임시 경로 파일 저장 확인
dir C:\tmp\ -Recurse
dir C:\dev\ -Recurse
dir C:\var\ -Recurse
dir C:\etc\ -Recurse
dir $env:TEMP -Recurse
악성 요청이 특정 경로에 파일을 저장했는지 확인합니다. 저는 윈도우 환경이어서 다음과 같고, 리눅스 환경인 경우 드라이브명과 역슬래시에 유의하여 작성합니다.
저의 경우, 윈도우 서버 환경에 방화벽 설정이 잘 막아주고 있었고, 버전 업그레이드 후에 점검을 해보니까 다행히 큰 문제는 없었습니다. 하지만 이런 공격에 평소에 빠르게 대비하기 위해 보안 관련 뉴스나 커뮤니티 확인을 주기적으로 해야겠다고 생각했습니다.
'공부 > 보안' 카테고리의 다른 글
| [보안] 보안 솔루션 (방화벽, IDS, IPS 등) (0) | 2024.06.04 |
|---|---|
| [보안] 인증 (Authentication) (0) | 2024.06.03 |
| [보안] 해시, 메시지 인증 코드, 전자서명 (0) | 2024.06.02 |
| [보안] 악성코드 / 소프트웨어 보안 (0) | 2024.05.31 |
| [보안] 인가 (Authorization) (0) | 2024.05.29 |