🇰🇷 한글 설명
PHP의 PDO Firebird 드라이버에서 SQL 쿼리 준비 중 NUL 바이트를 잘못 처리하여 SQL 인젝션이 발생한다. strncat() 함수가 NUL 바이트에서 멈추기 때문에 종료 따옴표가 손실되고 후속 SQL 토큰들이 문자열의 일부로 해석된다. 공격자가 PDO::quote()로 인용된 값을 SQL 문에 삽입하여 임의의 SQL 실행이 가능하다.
💡 쉬운 설명
PHP의 데이터베이스 연결 도구가 특수한 바이트를 처리할 때 버그가 있어서, 공격자가 몰래 SQL 명령어를 주입할 수 있다. 따옴표가 제대로 닫히지 않기 때문에 이런 일이 생긴다.
🇺🇸 원문 (English)
In PHP versions 8.2.* before 8.2.31, 8.3.* before 8.3.31, 8.4.* before 8.4.21, and 8.5.* before 8.5.6, the PDO Firebird driver improperly handles NUL bytes when preparing SQL queries. During token-by-token query construction, a string token containing a NUL byte is copied via strncat(), which stops at the NUL byte, dropping the closing quote and causing subsequent SQL tokens to be interpreted as part of the string. This allows SQL injection when attacker-controlled values are quoted via PDO::quote() and embedded in SQL statements.
📍 영향받는 시스템
PHP 8.2 (8.2.31 미만), 8.3 (8.3.31 미만), 8.4 (8.4.21 미만), 8.5 (8.5.6 미만) - Firebird PDO 드라이버 사용 시스템
⚔️ 공격 벡터
공격자가 NUL 바이트를 포함한 문자열을 PDO::quote()를 통해 인용 후 SQL 문에 포함시켜 SQL 인젝션 트리거
🛡️ 대응 방법
각 PHP 버전을 8.2.31, 8.3.31, 8.4.21, 8.5.6 이상으로 즉시 업그레이드 수행
🔧 검증 코드
출력된 PHP 버전이 영향받는 미만 버전인 경우 업그레이드 필요, 패치 버전이 명시된 이상이면 안전
php -v | grep -oE 'PHP [0-9]+\.[0-9]+\.[0-9]+'