← PHP 소식
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-17544BCMathbccomp()에서 발생하는 범위 초과 쓰기(Out-of-bounds write)
CVE-2026-17543PGSQLE'...' 백슬래시 이스케이프를 통한 SQL 인젝션
CVE-2026-7260Phar재귀 심볼릭 링크를 통한 크래시
CVE-2026-9672GDlibgd 라이브러리 업그레이드를 통한 취약점 수정

⚙️ Core

  • AST pretty printing에서 NUL 문자를 포함한 문자열 처리 오류 수정 (GH-22290)
  • clone with 이후 수정되지 않은 읽기 전용(readonly) 프로퍼티의 변경 잠금 처리 개선

🗓️ Date

  • timelib 2022.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\Url wither 메서드의 빈 opaque 호스트 처리 및 캐럿(^) 퍼센트 인코딩 버그 수정

Laravel 개발자에게 미치는 영향

🔴 보안 — 즉시 조치 필요

  • PGSQL + SQL 인젝션 (CVE-2026-17543): pgsql 드라이버를 직접 사용하거나 Laravel의 pgsql DB 커넥션을 사용하는 서비스라면 즉시 패치해야 합니다. 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, Laravel datetime 캐스팅 등 날짜 처리 로직에서 엣지 케이스가 수정되었습니다. 연도 0 근처의 유닉스 타임스탬프나 특수 형식의 날짜 파싱을 사용한다면 동작을 재확인하세요.
  • Reflection NUL 바이트 처리: 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 --version

Laravel 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 --build

2. composer.json PHP 버전 제약 확인

{ "require": { "php": "^8.5" } }
  • ^8.5는 8.5.x 전체를 포함하므로 별도 변경 불필요합니다.
  • >=8.5.0, <8.5.9와 같이 상한선이 고정되어 있다면 제약을 갱신하세요.
# 로컬 의존성 재설치 확인composer installcomposer check-platform-reqs

3. 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-fpm

5. 프로덕션 배포

⚠️ 보안 릴리스이므로 평상시보다 신속하게 배포를 진행하되, 아래 절차를 준수하세요.

# 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분)

📎 참고 링크

php.net 공식 릴리스 노트 보기 →