← 아티클 목록
업데이트phplaravel업데이트

PHP 7.0.21 업데이트 — 한국 Laravel 개발자 영향 분석

작성: 라라벨 코리아 (초안)

발행: 2026년 8월 6일

## 요약

요약

PHP 7.0.21이 2017년 7월 6일에 보안 릴리스로 발표되었습니다. 이번 업데이트는 힙 버퍼 오버플로우, Use-After-Free, 스택 버퍼 오버플로우 등 다수의 메모리 안전성 취약점을 포함한 보안 패치가 핵심입니다. Mbstring 확장에서는 Oniguruma 정규식 라이브러리 관련 CVE가 5건 포함되어 있어 즉각적인 업그레이드 검토가 필요합니다.


핵심 내용

🔐 보안 취약점 수정 (Critical)

PHP 7.0.21에서 수정된 보안 관련 버그는 다음과 같습니다:

  • unserialize() 힙 Use-After-Free (bug #74101, #74614): zval_get_type에서 발생하는 UAF 취약점. 신뢰할 수 없는 입력값을 unserialize()로 처리하는 코드에서 원격 코드 실행 가능성이 있습니다.
  • unserialize() 힙 버퍼 오버리드 (bug #74111): finish_nested_data에서 발생. 역직렬화 공격 벡터와 연계될 수 있습니다.
  • PHP INI 파싱 스택 버퍼 오버플로우 (bug #74603): INI 파일 파싱 과정에서 스택 오버플로우가 발생할 수 있으며, 공유 호스팅 환경에서 특히 위험합니다.
  • wddx_deserialize() 힙 아웃-오브-바운드 리드 (bug #74819): php_parse_date()를 통해 발생. WDDX 기능을 사용하는 프로젝트에 직접적인 영향이 있습니다.
  • OpenSSL openssl_seal() 음수 크기 파라미터 (bug #74651): memcpy-1 크기가 전달되는 취약점.
  • GD 버퍼 오버리드 (bug #74435): 초기화되지 않은 메모리 영역 읽기.

📦 Mbstring / Oniguruma CVE 5건 일괄 패치

CVE-2017-9224
CVE-2017-9226
CVE-2017-9227
CVE-2017-9228
CVE-2017-9229

Oniguruma는 PHP Mbstring 확장이 내부적으로 사용하는 정규식 라이브러리입니다. 한국 Laravel 프로젝트에서 mb_* 함수나 멀티바이트 문자열 처리를 사용하는 경우 — 사실상 한국어를 처리하는 거의 모든 프로젝트 — 이 CVE들의 영향권 안에 있습니다. 정규식 패턴에 외부 입력이 포함되는 경우 악용 가능성이 높습니다.

Intl 확장 취약점

  • msgfmt_parse_message() 스택 버퍼 오버플로우 (bug #73473): 다국어(i18n) 처리를 위해 MessageFormatter를 사용하는 Laravel 프로젝트에 영향.
  • grapheme_strpos() 불법 메모리 접근 (bug #73634): 그래핌 클러스터 처리 시 발생.

기타 안정성 버그 수정

컴포넌트버그 번호내용
SPL#74478SplFixedArray에서 null 병합 연산자(??) 오작동
Standard#73648substr() 힙 버퍼 오버플로우
PCRE#74087번들 PCRE 라이브러리 사용 시 세그멘테이션 폴트
Reflection#74673미정의 상수로 Reflection 객체 문자열 캐스팅 시 세그폴트
Streams#74556stream_socket_get_name()이 null 문자 반환
FTP#74598ftp:// 래퍼가 context 인수 무시
Opcache#74663opcache.memory_protect + validate_timestamp 조합 세그폴트

참고: PHP 7.0.20(2017-06-08), 7.0.19(2017-05-11) 등 이전 마이너 릴리스의 변경 사항도 7.0.21 패키지에 누적 포함됩니다.


한국 Laravel 개발자에게 미치는 영향

호환성 및 마이그레이션 부담

  • PHP 7.0.x 브랜치는 이 시점(2017년 7월)에서도 이미 PHP 7.1이 안정 버전으로 출시된 상황이었습니다. PHP 7.0은 현재 공식 지원 종료(EOL) 상태이므로, 7.0.21로 단순 업데이트하는 것보다 PHP 7.4 이상으로 마이그레이션하는 것을 강력히 권장합니다.
  • 다만, 레거시 시스템을 즉각 업그레이드할 수 없는 환경이라면 7.0.21 패치 적용이 현실적인 단기 조치입니다.

한국어 처리 (Mbstring CVE 영향)

한국 서비스는 거의 대부분 mb_strlen(), mb_substr(), mb_convert_encoding() 등 Mbstring 함수를 사용합니다. CVE-2017-9224~9229는 Oniguruma 내부의 메모리 안전성 문제로, 외부에서 입력받은 문자열을 정규식으로 처리하는 코드(예: 사용자 검색, 폼 입력 필터링)에서 악용될 수 있습니다.

Laravel 프레임워크와의 관계

  • Laravel 5.4~5.5 버전대가 PHP 7.0을 지원하던 시기의 릴리스입니다.
  • unserialize() 취약점은 Laravel의 세션, 캐시(Redis/Memcached 드라이버) 레이어와 연계될 때 위험도가 증가합니다. Laravel은 내부적으로 직렬화를 사용하며, 캐시 백엔드가 외부에서 조작 가능한 경우 공격 벡터가 됩니다.
  • SplFixedArray + null 병합 연산자 버그(#74478)는 PHP 7.0의 새 문법을 활용하던 코드에서 예상치 못한 동작을 유발할 수 있었습니다.

로컬 개발 환경

  • Laravel Valet (macOS): Homebrew의 PHP 포뮬러가 최신 패치 버전으로 자동 업데이트되므로, brew upgrade php@7.0 또는 Valet의 PHP 버전 전환 명령으로 적용 가능합니다. (단, 현재 Homebrew는 PHP 7.0을 더 이상 지원하지 않습니다.)
  • Laravel Sail / Docker: 공식 php:7.0-fpm 이미지는 패치된 버전을 포함하도록 업데이트되었습니다. docker pull php:7.0-fpm으로 최신 이미지를 받은 후 컨테이너를 재빌드하세요.
  • 공유 호스팅: PHP INI 파싱 스택 오버플로우(#74603)는 공유 호스팅 환경에서 특히 위험합니다. 호스팅 제공업체에 PHP 버전 업데이트를 요청하세요.

실무 체크리스트

로컬 환경

  • 현재 PHP 버전 확인: php -v
  • PHP 7.0 사용 중이라면 7.0.21 이상 패치 여부 확인
  • mb_* 함수를 사용하는 코드에서 외부 입력 유효성 검사 로직 점검
  • unserialize()를 직접 사용하는 코드 감사 — 가능하면 json_decode()로 대체 고려
  • SplFixedArray와 null 병합 연산자(??)를 함께 사용하는 코드 테스트

스테이징 환경

  • PHP 버전 업그레이드 후 php -r "phpinfo();" 또는 <?php phpinfo();로 버전 확인
  • Laravel 세션 드라이버 설정 점검 (config/session.phpdriver 값)
  • Opcache 설정 점검: opcache.memory_protectvalidate_timestamps를 동시에 사용하는 경우 세그폴트 가능성 확인 (bug #74663)
  • FTP 관련 기능 사용 시 컨텍스트 전달 로직 재테스트 (bug #74598)
  • PCRE 번들 라이브러리 사용 여부 확인 (php -r "echo PCRE_VERSION;")

프로덕션 환경

  • 즉시: PHP 7.0.21 패치 버전으로 업데이트 (단기 조치)
  • 중기: PHP 7.0 EOL 상태임을 팀에 공유하고 PHP 8.1/8.2/8.3 마이그레이션 로드맵 수립
  • unserialize()가 외부 데이터를 처리하는 엔드포인트 존재 여부 확인 및 WAF/입력 검증 강화
  • Mbstring CVE 영향 점검: 사용자 입력을 정규식(preg_match + PREG_OFFSET_CAPTURE 또는 mb_ereg*)으로 처리하는 라우트 목록 작성 및 퍼징 테스트
  • 배포 후 에러 로그(storage/logs/laravel.log) 및 PHP-FPM 오류 로그 모니터링 강화
  • Docker 기반 배포 시: docker-compose pull && docker-compose build --no-cache 후 롤링 재배포

⚠️ 편집자 검토 필요: PHP 7.0.21은 2017년 릴리스로, 현재 PHP 7.0 전체가 EOL입니다. 이 기사가 레거시 시스템 유지 관리 맥락인지, 아니면 역사적 참고 자료로 작성되는지 목적을 명확히 하여 독자 대상을 조정하기를 권장합니다.