PHP 7.4.21 업데이트 — 한국 Laravel 개발자 영향 분석
작성: 라라벨 코리아 (초안)
발행: 2026년 8월 6일
## 요약
요약
PHP 7.4.21은 2021년 7월 1일에 릴리스된 보안 패치 버전으로, CVE-2021-21705(FILTER_VALIDATE_URL SSRF 우회) 및 CVE-2021-21704(PDO_Firebird 스택 버퍼 오버플로우 등 4건) 총 2개의 CVE를 포함한 즉각 대응이 필요한 업데이트입니다. 보안 취약점 외에도 Core, Bzip2, OpenSSL, Standard 영역의 버그 수정이 함께 포함되어 있습니다. PHP 7.4 브랜치를 운영 중인 모든 Laravel 프로젝트는 가능한 한 빠르게 업그레이드를 적용해야 합니다.
핵심 내용
🔴 보안 취약점 (즉각 대응 필요)
CVE-2021-21705 — SSRF bypass in FILTER_VALIDATE_URL
- 영향 버그:
#81122 - 심각도: 중~고 (SSRF, Server-Side Request Forgery)
- Laravel 애플리케이션에서
filter_var($url, FILTER_VALIDATE_URL)또는Request::url()검증 로직, 혹은 커스텀 Validation Rule에서 URL 필터를 직접 사용하는 경우 공격자가 내부 네트워크 리소스에 접근하도록 우회할 수 있습니다. - 특히 주의:
Http::get(),Guzzle호출 전 URL 유효성을 PHP 내장 필터만으로 검증하는 패턴은 이 취약점에 노출될 수 있습니다.
CVE-2021-21704 — PDO_Firebird 복수 취약점 (4건)
- 영향 버그:
#76448,#76449,#76450,#76452 - 스택 버퍼 오버플로우 및 SIGSEGV(세그멘테이션 폴트)를 유발하는 취약점 4건이 한꺼번에 패치되었습니다.
- Firebird DB를 사용하지 않는 경우 직접적인 영향은 없으나, 공유 서버 환경(예: 공유 호스팅, 멀티테넌트 환경)에서는 PHP 바이너리 자체가 충돌 대상이 될 수 있습니다.
🟡 주요 버그 수정 (7.4.21 릴리스 기준)
| 컴포넌트 | 버그 번호 | 내용 | Laravel 관련성 |
|---|---|---|---|
| Core | #81068 | realpath_cache_clean() 이중 해제(Double free) | 파일 캐시, Storage 파사드 사용 시 간접 영향 가능 |
| Core | #76359 | open_basedir 우회 (.. 추가) | 서버 보안 정책 우회 가능성 — 보안 취약점으로도 분류 가능 |
| Core | #81090 | Typed property에서 .= 연산자 성능 저하 | PHP 7.4에서 타입 선언된 프로퍼티를 자주 사용하는 Model, DTO 클래스에 영향 |
| Core | #81070 | 메모리 제한 비교 시 정수 언더플로우 | 대용량 파일 처리, 이미지 리사이즈 등 메모리 집약적 작업에서 예상치 못한 동작 유발 가능 |
| Bzip2 | #81092 | stream_filter_remove 전 fflush 호출 시 스트림 손상 | Bzip2 압축 스트림 처리 중 데이터 손실 가능 |
| OpenSSL | #76694 | Windows 네이티브 인증서 검증이 CN을 서버명으로 사용 | Windows 개발 환경(Laragon, XAMPP 등) 및 Windows Server 운영 환경에 영향 |
| Standard | #81048 | phpinfo(INFO_VARIABLES) "Array to string conversion" 오류 | 디버깅 도구 사용 시 오작동 |
📋 누적 릴리스 흐름 요약 (7.4.14 ~ 7.4.21)
이번 7.4.21은 단일 릴리스로 보기보다 7.4.14부터 누적된 수십 건의 수정 사항을 포함합니다. 특히 Laravel 개발자에게 관련성이 높은 이전 버전 수정 사항을 정리하면:
- 7.4.20:
call_user_func_array반복 호출 시 메서드명 손상 (#80929) — 동적 디스패치, 이벤트 시스템에 잠재적 영향 - 7.4.20:
mb_convert_encoding이 배열에서 참조를 제거하는 버그 (#81011) — 다국어 처리 시 데이터 변형 가능 - 7.4.18:
imap_mail_compose()헤더 인젝션 (#80710) — 메일 기능 사용 시 보안 위협 - 7.4.18: MySQL 8.0 +
ATTR_EMULATE_PREPARES비활성화 시 세그폴트 (#80713) — MySQL 8 환경에서 매우 중요 - 7.4.16:
file_get_contents()2GB 이상 파일 처리 실패 (#80654) - 7.4.14:
FILTER_VALIDATE_URL이 잘못된 userinfo를 포함한 URL 허용 (CVE-2020-7071,#77423)
한국 Laravel 개발자에게 미치는 영향
보안 우선순위
- SSRF (CVE-2021-21705): 카카오, 네이버 API 연동, 내부 마이크로서비스 간 통신에서 URL 파라미터를 사용자 입력으로 받는 경우 즉시 점검이 필요합니다.
FILTER_VALIDATE_URL만을 신뢰하는 방어 로직은 이 패치 이후에도 추가적인 화이트리스트 검증을 병행하는 것을 권장합니다. - 오픈베이스디어 우회 (#76359): 공유 호스팅 환경(카페24, 가비아 등 국내 호스팅)에서
open_basedir설정에 의존한 디렉토리 격리 정책이 무력화될 수 있었습니다.
환경별 호환성
| 환경 | 영향 | 조치 |
|---|---|---|
| Laravel Sail (Docker) | php:7.4-fpm 베이스 이미지 버전 확인 필요 | Dockerfile 또는 docker-compose.yml의 이미지 태그 업데이트 |
| Laravel Valet (macOS) | Homebrew PHP 7.4 패키지 업데이트 필요 | brew upgrade php@7.4 |
| Ubuntu/Debian (Ondrej PPA) | apt 업데이트로 처리 가능 | apt-get update && apt-get upgrade php7.4 |
| AWS EC2 / Lightsail | Amazon Linux 2 기본 PHP 버전 확인 후 Remi 또는 직접 컴파일 | yum/dnf 업데이트 또는 직접 빌드 |
| Windows (Laragon / XAMPP) | OpenSSL CN 버그 (#76694) 직접 영향 | 공식 배포 패키지 교체 |
MySQL 8.0 사용자 주의
7.4.18에서 수정된 #80713 (MySQLnd + MySQL 8.0 세그폴트)은 국내에서도 MySQL 8.0으로의 전환이 활발히 이루어지고 있는 만큼, PHP 7.4를 MySQL 8.0과 함께 사용 중이고 아직 7.4.18 미만 버전을 사용한다면 예상치 못한 프로세스 크래시가 발생할 수 있습니다.
PHP 7.4 EOL 고려
⚠️ PHP 7.4는 2022년 11월 28일로 공식 지원이 종료됩니다. 7.4.21로 업그레이드하되, 중장기적으로 PHP 8.1 이상으로 마이그레이션 계획을 수립하는 것을 강력히 권장합니다.
실무 체크리스트
로컬 개발 환경
- 현재 PHP 버전 확인:
php -v - Valet 사용 시:
brew upgrade php@7.4후valet restart실행 - Sail(Docker) 사용 시:
docker pull php:7.4-fpm후./vendor/bin/sail build --no-cache실행 - Laragon/XAMPP(Windows) 사용 시: 공식 사이트에서 PHP 7.4.21 바이너리 다운로드 후 교체
-
phpinfo()또는php -r "echo PHP_VERSION;"으로 업그레이드 확인
스테이징 환경
- PHP 7.4.21 패키지 설치:
# Ubuntu (Ondrej PPA)sudo apt-get updatesudo apt-get install --only-upgrade php7.4 php7.4-fpm php7.4-cliphp -v # 7.4.21 확인 - PHP-FPM 재시작:
sudo systemctl restart php7.4-fpm - 애플리케이션 핵심 기능 스모크 테스트 실행
-
FILTER_VALIDATE_URL사용 코드베이스 검색 및 동작 확인:grep -rn "FILTER_VALIDATE_URL" app/ --include="*.php" - MySQL 8.0 환경이라면 Prepared Statement 동작 테스트 (특히
ATTR_EMULATE_PREPARES => false설정 여부) - Typed property에
.=연산자를 사용하는 클래스 성능 비교 테스트 (7.4.21에서 개선됨)
프로덕션 환경
- 배포 전 스테이징에서 충분한 검증 완료 확인
- 배포 시간대 결정 (트래픽 최소 시간대 권장)
- 패키지 업데이트:
sudo apt-get updatesudo apt-get install --only-upgrade php7.4 php7.4-fpm - PHP-FPM Graceful Reload (기존 연결 유지):
sudo systemctl reload php7.4-fpm# 또는sudo kill -USR2 $(cat /var/run/php/php7.4-fpm.pid) - Nginx/Apache 재시작 없이 PHP-FPM만 reload하여 무중단 적용
- 배포 후 에러 로그 모니터링 (
/var/log/php7.4-fpm.log, Laravelstorage/logs/laravel.log) - Laravel Telescope 또는 Sentry 등 모니터링 도구에서 이상 에러율 증가 여부 확인 (최소 30분)
- SSRF 관련 코드 보안 감사 일정 수립:
// 단순 FILTER_VALIDATE_URL만 사용하는 패턴 — 추가 검증 필요 if (filter_var($url, FILTER_VALIDATE_URL)) { // 화이트리스트 도메인 검증 추가 권장 $allowedHosts = ['api.example.com', 'partner.co.kr']; $host = parse_url($url, PHP_URL_HOST); abort_unless(in_array($host, $allowedHosts), 422); } - PHP 8.x 마이그레이션 로드맵 팀 내부 공유 (PHP 7.4 EOL: 2022년 11월)
편집자 주: 이 문서는 드래프트입니다. PHP 7.4.17, 7.4.19 버전의 체인지로그는 제공된 원본 데이터에 일부 누락되어 있어 해당 버전에 대한 분석은 포함하지 않았습니다. 공식 php.net 릴리스 페이지에서 최종 확인을 권장합니다.