PHP 8.5.9보안
PHP 8.5.9 업데이트 안내
릴리스: 2026년 7월 30일
게시: 2026년 7월 31일
PHP 8.5.9 보안 릴리스 공지 ⚠️ 보안 릴리스입니다. 즉시 업그레이드를 권장합니다.
PHP 8.5.9 보안 릴리스 공지
⚠️ 보안 릴리스입니다. 즉시 업그레이드를 권장합니다.
요약
PHP 8.5.9가 2026년 7월에 공개되었으며, 이번 릴리스에는 다수의 보안 취약점 수정이 포함되어 있습니다. BCMath, GD, PGSQL, Phar 등 핵심 확장 모듈에서 발견된 취약점이 패치되었으며, Core, Opcache, Standard, DOM 등 광범위한 영역에서 안정성 버그도 함께 수정되었습니다. Laravel을 포함한 PHP 기반 프로덕션 서비스를 운영 중이라면 신속한 업그레이드가 필요합니다.
주요 변경 사항
🔴 보안 수정 (Security Fixes)
| CVE | 영역 | 내용 |
|---|---|---|
| CVE-2026-17544 | BCMath | bccomp()에서 발생하는 범위 초과 쓰기(Out-of-bounds write) |
| CVE-2026-17543 | PGSQL | E'...' 백슬래시 이스케이프를 통한 SQL 인젝션 |
| CVE-2026-7260 | Phar | 재귀 심볼릭 링크를 통한 크래시 |
| CVE-2026-9672 | GD | libgd 라이브러리 업그레이드를 통한 취약점 수정 |
⚙️ Core
- AST pretty printing에서 NUL 문자를 포함한 문자열 처리 오류 수정 (
GH-22290) clone with이후 수정되지 않은 읽기 전용(readonly) 프로퍼티의 변경 잠금 처리 개선
🗓️ Date
timelib2022.17로 업데이트- 단일 공백 문자열 파싱 오류 수정 (
GH-19803) - 연도 0의 2월에 대한 Unix 타임스탬프
@표기 파싱 오류 수정 Date클래스를 상속한 사용자 정의 클래스에서__debugInfo가 동작하지 않던 문제 수정 (GH-11310)
🔢 BCMath / Calendar / Standard
base_convert()결과가 최대 64자로 잘리던 버그 수정 (GH-22395)array_multisort()비교 함수가 배열을 변경할 때 발생하는 Use-after-free 수정 (GH-22678)gregoriantojd()/juliantojd()에서INT_MAX연도 처리 시 정수 오버플로 수정 (GH-22602)
⚡ Opcache / JIT
- 메가모픽(megamorphic) 호출 시 Tracing JIT에서 발생하던 SIGSEGV 및 잘못된 캐시 슬롯 참조 수정 (
GH-22443,GH-22158) - Opcache preload된 트레이트의 프로퍼티 훅 게터에서 발생하던 무한 재귀 수정 (
GH-21770)
🗃️ PDO_ODBC / ODBC
- 힙 버퍼 Over-read 및 Over-write, Out-of-bounds 쓰기 등 다수의 메모리 안전성 버그 수정 (
GH-22665,GH-22666,GH-22667,GH-22668) - ODBC 연결 풀링에서 DSN에 자격 증명이 없을 때 발생하던 크래시 수정 (
GH-20726)
📦 Phar
.phar매직 디렉토리 보호 로직 불일치 수정 (파일/디렉토리 생성, 복사, 스트림 탐색, 추출 전반에 걸쳐 일관성 있는 처리)
🔍 Reflection
ReflectionClass::hasProperty()/getProperty()가 부모 클래스의 private 프로퍼티를 가리는 동적 프로퍼티를 무시하던 문제 수정 (GH-22441)ReflectionConstant::__toString()및Reflection*::__toString()에서 NUL 바이트로 인한 출력 잘림 수정 (GH-22658,GH-22681)
🌐 Intl
Locale::lookup()/locale_lookup()이 언어 태그 정규화 실패 시 폴백 로케일 대신NULL을 반환하도록 수정Collator,Spoofchecker,IntlListFormatter생성자를 두 번 호출 시 발생하는 메모리 누수 수정
🗂️ DOM / Session / SPL / Zip / URI 등
Dom\XMLDocument깊은 중첩 구조 직렬화 시 스택 오버플로 수정 (GH-22570)getElementsByClassName()->item()이 임의 접근 시 잘못된 엘리먼트를 반환하던 버그 수정class_parents(),class_implements(),class_uses()에서 앞에 붙는 역슬래시(\) 무시 처리 추가ZipArchive주석 관련 크래시 및FL_UNCHANGED플래그 무시 버그 수정Uri\WhatWg\Urlwither 메서드의 빈 opaque 호스트 처리 및 캐럿(^) 퍼센트 인코딩 버그 수정
Laravel 개발자에게 미치는 영향
🔴 보안 — 즉시 조치 필요
- PGSQL + SQL 인젝션 (CVE-2026-17543):
pgsql드라이버를 직접 사용하거나 Laravel의pgsqlDB 커넥션을 사용하는 서비스라면 즉시 패치해야 합니다.E'...'형식의 문자열을 통한 SQL 인젝션이 가능합니다. - BCMath Out-of-bounds (CVE-2026-17544):
bccomp(),BcMath\Number관련 기능을 사용하는 경우 영향을 받습니다. Laravel의 금액 계산 등에 BCMath를 활용하는 경우 특히 주의하세요. - Phar 재귀 심볼릭 링크 크래시 (CVE-2026-7260):
phar://스트림이나 Phar 아카이브를 직접 다루는 패키지, 빌드 파이프라인이 있다면 영향을 받습니다. - libgd 취약점 (CVE-2026-9672): 이미지 업로드/처리 기능(
Intervention Image, GD 직접 사용 등)이 있는 서비스는 영향받을 수 있습니다.
🟡 안정성 — 확인 권장
- Opcache/JIT 크래시 수정: JIT를 활성화(
opcache.jit_buffer_size)한 프로덕션 환경에서 메가모픽 메서드 호출이 많은 경우(일반적인 Laravel 서비스에 해당) SIGSEGV가 발생할 수 있었습니다. 이번 릴리스에서 수정되었습니다. array_multisort()Use-after-free: 비교 함수 내부에서 배열을 수정하는 패턴이 있다면 즉시 영향을 받습니다.- Readonly 프로퍼티
clone with처리: PHP 8.5에서 도입된clone with구문을 사용하는 코드는 이번 수정 사항을 검토하세요. Date/timelib업데이트: Carbon, Laraveldatetime캐스팅 등 날짜 처리 로직에서 엣지 케이스가 수정되었습니다. 연도 0 근처의 유닉스 타임스탬프나 특수 형식의 날짜 파싱을 사용한다면 동작을 재확인하세요.ReflectionNUL 바이트 처리: PHPUnit, Laravel Telescope, IDE 헬퍼 패키지 등 Reflection API를 적극 사용하는 도구에서 안정성이 향상되었습니다.
🟢 하위 호환성
이번 릴리스는 8.5.x 마이너 버전 내 패치 릴리스로, 하위 호환성을 깨는 변경 사항(Breaking Change)은 없습니다. composer.json의 PHP 버전 제약이 ^8.5 또는 >=8.5.0이라면 추가 코드 수정 없이 업그레이드할 수 있습니다.
업그레이드 안내
1. 로컬 개발 환경
Homebrew (macOS)
brew updatebrew upgrade php# 특정 버전 관리 시 (shivammathur/php tap 사용)brew upgrade shivammathur/php/php@8.5php -v # PHP 8.5.9 확인Laravel Valet
brew upgrade phpvalet restartvalet --versionLaravel Sail (Docker)
# docker-compose.yml 또는 .env의 PHP 버전 확인 후
docker compose pull
docker compose down && docker compose up -d
docker compose exec laravel.test php -v일반 Docker
# Dockerfile
FROM php:8.5.9-fpm-alpine
# 또는 latest 태그 사용 시 재빌드docker pull php:8.5-fpmdocker compose up -d --build2. composer.json PHP 버전 제약 확인
{
"require": {
"php": "^8.5"
}
}^8.5는 8.5.x 전체를 포함하므로 별도 변경 불필요합니다.>=8.5.0, <8.5.9와 같이 상한선이 고정되어 있다면 제약을 갱신하세요.
# 로컬 의존성 재설치 확인composer installcomposer check-platform-reqs3. CI/CD 매트릭스 업데이트
GitHub Actions 예시
jobs:
test:
strategy:
matrix:
php: ['8.3', '8.4', '8.5'] # 8.5 포함 확인
steps:
- uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
# 패치 버전 고정이 필요한 경우:
# php-version: '8.5.9'4. 스테이징 환경
# Ubuntu / Debian (Ondřej Surý PPA)sudo add-apt-repository ppa:ondrej/php -ysudo apt updatesudo apt upgrade php8.5 php8.5-fpm php8.5-cli php8.5-*# 버전 확인php8.5 -v# PHP-FPM 재시작sudo systemctl restart php8.5-fpm# RHEL / CentOS (Remi 저장소)sudo dnf upgrade php php-fpmsudo systemctl restart php-fpm5. 프로덕션 배포
⚠️ 보안 릴리스이므로 평상시보다 신속하게 배포를 진행하되, 아래 절차를 준수하세요.
# 1. 스테이징에서 전체 테스트 스위트 실행
php artisan test --env=staging
# 2. PHP 업그레이드 (패키지 관리자 사용)
sudo apt upgrade php8.5-fpm
# 3. 설정 캐시 갱신 (Opcache 포함)
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 4. Opcache 수동 재시작 (필요시)
sudo systemctl restart php8.5-fpm
# 또는 nginx/apache 재시작
sudo systemctl reload nginx
# 5. 업그레이드 확인
php -v
php -r "echo PHP_VERSION;"6. 업그레이드 후 체크리스트
-
php -v로 8.5.9 확인 -
php -m으로 필요한 익스텐션 로드 확인 -
composer check-platform-reqs통과 확인 - PGSQL 사용 시 SQL 인젝션 취약점 패치 적용 여부 재확인
- GD 이미지 처리 기능 동작 확인
- Opcache/JIT 활성화 환경에서 애플리케이션 정상 동작 확인
- 에러 로그 모니터링 (배포 후 최소 30분)
📎 참고 링크