맛집 글만 올리던 블로그에 오늘은 조금 다른 기록을 남깁니다. 10월 21일 PHP에서 치명적인 보안 취약점이 공개되면서, 이 블로그를 돌리는 서버도 급하게 손을 봐야 했습니다. 워드프레스로 블로그를 직접 운영하는 분이라면 같은 상황일 수 있어서, 무엇을 확인했고 어떻게 고쳤는지 순서대로 정리합니다.
PHP2Shell, 무엇이 문제였나
이번에 공개된 취약점은 CVE-2026-109618과 CVE-2026-109619 두 건이고, 묶어서 PHP2Shell이라고 부릅니다. 위험도 점수는 CVSS 9.2로 「치명적」 등급입니다. 로그인하지 않은 공격자도 웹 서버에서 원격으로 코드를 실행할 수 있다는 점이 핵심입니다.
- 영향 범위가 넓습니다. 지난 10년 동안 나온 PHP 대부분이 해당된다는 분석이 있습니다.
- 공개 전부터 공격 시도가 관측됐고, 공개 직후에는 공격 코드(PoC)가 GitHub에 대량으로 올라왔습니다(안랩 ASEC 분석).
- 워드프레스나 플러그인을 업데이트해도 막히지 않습니다. 워드프레스 아래에서 돌아가는 PHP 자체를 올려야 합니다.
고쳐진 판은 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35입니다(PHP 릴리스 공지). 자기 서버의 PHP가 이보다 낮으면 취약한 상태입니다.
1. 우리 블로그의 PHP 버전부터 확인
워드프레스 관리자 화면에서 도구 → 사이트 건강 → 정보 → 서버(사이트 건강 안내)로 들어가면 PHP 버전이 나옵니다. 확인해 보니 이 블로그는 PHP 8.2.16이었습니다. 고쳐진 8.2.35보다 한참 낮은, 그대로 노출된 상태였습니다.
카페24나 SiteGround 같은 관리형 호스팅은 업체가 서버를 대신 패치해 줍니다. 하지만 이 블로그는 AWS Lightsail에 서버를 직접 띄운 구조라서, 그 일을 직접 해야 했습니다.
2. 왜 서버를 옮겼나
서버는 Bitnami라는 패키지로 만든 워드프레스였습니다. Bitnami는 PHP를 자체 폴더에 따로 넣어 두기 때문에 일반적인 업데이트 명령으로는 PHP가 올라가지 않습니다. 게다가 Lightsail의 Bitnami 블루프린트는 2026년 5월부터 업데이트가 끊긴 상태였습니다(AWS 이전 안내).
AWS 공식 안내도 Lightsail이 직접 관리하는 워드프레스 블루프린트로 옮기기를 권했습니다. 옮기고 나면 앞으로는 sudo apt update && sudo apt upgrade 한 줄로 PHP 보안 패치를 받을 수 있어서, 이번 기회에 이전하기로 했습니다.
3. 이전 순서
- 스냅샷부터: 기존 서버를 통째로 백업해서 언제든 되돌릴 수 있게 했습니다.
- 새 서버 만들기: 같은 사양(1GB 메모리, 월 7달러)으로 Lightsail 워드프레스 블루프린트를 만들었습니다. 만들자마자 PHP가 8.2.35인 것을 확인했습니다.
- DB와 파일 옮기기: 워드프레스의 「내보내기」 기능 대신 DB 전체와 wp-content 폴더를 통째로 옮겼습니다. 그래야 플러그인 설정, SEO 데이터, 추가 CSS까지 그대로 따라옵니다.
- 설정 맞추기: 사이트 주소, 글 주소 규칙(.htaccess), HTTPS 인증서, 보안 키를 기존 서버와 같게 맞췄습니다.
- 전환: 고정 IP를 새 서버로 옮겼습니다. DNS를 바꿀 필요가 없어서 끊긴 시간은 1분이 안 됐습니다.
4. 옮기면서 겪은 함정
- 보안 키를 새로 만들면 Site Kit 연결이 풀립니다. 구글 연결 정보가 워드프레스 보안 키로 암호화돼 있어서, 기존 서버의 키를 그대로 가져와야 했습니다.
- 파일 권한. 옮긴 파일의 소유자가 웹 서버 사용자와 달라서 W3 Total Cache가 설정 파일을 쓰지 못했고, 관리자 화면에 「심각한 오류」가 떴습니다. wp-content 소유자를 웹 서버 사용자로 바꾸니 해결됐습니다.
- 새 서버는 CPU 크레딧이 0에서 시작합니다. Lightsail 서버는 새로 만들면 버스트 크레딧이 없어서, 업데이트를 몰아서 하면 잠깐 느려질 수 있습니다.
- 관리자 이메일이 가짜 주소였습니다. Bitnami 기본값인 user@example.com이 그대로 있어서, 그동안 워드프레스 알림이 아무 데도 가지 않고 있었습니다.
5. 정리한 김에 속도도 손봤습니다
| 항목 | 전 | 후 |
|---|---|---|
| PHP | 8.2.16 (취약) | 8.2.35 (패치) |
| 페이지 응답 시간(캐시 적중) | 약 0.45초 | 약 0.03초 |
| 홈 화면 썸네일 12장 | 약 1.5MB | 약 0.78MB |
| HTTPS 인증서 | 수동 관리 | 90일마다 자동 갱신(Let’s Encrypt) |
페이지 캐시가 꺼져 있던 것을 켜고, 홈 카드가 1200px짜리 사진을 받던 것을 768px로 줄였습니다. 화면에 보이는 모습은 그대로이고, 비용이 드는 플러그인이나 요금제는 쓰지 않았습니다.
워드프레스를 직접 운영한다면
- 지금 바로 사이트 건강 화면에서 PHP 버전을 확인해 보세요.
- 관리형 호스팅이라면 업체 공지를 확인하고, 직접 운영하는 서버라면 PHP 패키지를 올려야 합니다.
- 작업 전에는 반드시 스냅샷이나 백업부터 떠 두세요.
참고한 자료: AWS Lightsail PHP 업데이트 안내, 안랩 ASEC 긴급 공지, PHP 릴리스 공지