심각한 SQL 인젝션 결함에 취약한 PHP 7 CVE-2022-31631

지원 종료(EOL)된 PHP용 php2shell 패치(CVE-2026-109618 및 CVE-2026-109619)가 출시되었습니다. 수요가 많아 평소보다 영업팀의 답변이 늦어지고 있으므로, 패치된 패키지를 가장 빠르게 확보하려면 온라인에서 Runtimes용 ELS를 구매하시기 바랍니다 (새 탭에서 열림). 패치 FAQ 읽어보기

이 블로그 글의 AI 요약으로 바로 가기

  • Perplexity를 사용하여 이 게시물을 요약해 주세요
  • Gemini로 이 게시물을 요약해 주세요

경영진 요약

 

저희 보안 연구팀은 다음과 같은 사실을 발견했습니다. CVE-2022-31631의 심각한 SQL 인젝션 취약점을 발견했습니다. CVSS 3 점수 9.1이 PHP 8 이상 버전만 언급하는 공식 권고에도 불구하고 PHP 7 설치(Windows 및 Linux)에 영향을 미친다는 사실을 발견했습니다. 이 심각도가 높은 취약점을 통해 공격자는 PDO SQLite 드라이버의 SQL 살균을 우회할 수 있으며, 잠재적으로 데이터베이스 손상으로 이어질 수 있습니다. 특히 우려스러운 점은 이 취약점이 공개된 시기가 PHP 7이 지원 종료(EOL) 상태에 도달한 직후에 발생하여 많은 조직이 공식 패치가 없는 상태에서 취약한 상태에 놓여 있다는 점입니다.

취약점 설명

 

CVE-2022-31631은 SQLite 데이터베이스와 함께 사용할 때 PDO::quote() 함수에 영향을 미치는 심각한 보안 결함입니다. 이 함수에 지나치게 긴 문자열이 제공되면 정수 오버플로가 발생하여 드라이버가 데이터를 잘못 위생 처리하게 됩니다. 이러한 부적절한 위생 처리는 다음과 같은 결과를 초래할 수 있습니다:

  1. SQL 인젝션 취약점
  2. 데이터베이스 콘텐츠에 대한 무단 액세스
  3. 데이터 조작 또는 파기
  4. 전체 시스템 손상 가능성
  5. 서비스 거부 조건

이 취약점의 중요성은 CVSS 점수 9.1점에 반영되어 즉각적인 주의가 필요한 '중요' 위험으로 분류됩니다.

PHP 7: 취약하고 간과되는 부분

 

CVE-2022-31631에 대한 공식 권고에서는 이러한 영향을 받는 버전에 대해서만 언급하고 있습니다:

  • PHP 8.0x 8.0.27 앞
  • PHP 8.1x 8.1.15 앞
  • PHP 8.2x 8.2.2 앞

그러나 종합적인 보안 테스트 결과 PHP 7 시리즈 설치도 이 SQL 인젝션 결함에 취약한 것으로 확인되었습니다. 따라서 아직 PHP 7을 실행 중인 조직에는 상당한 보안 공백이 생깁니다:

  1. PHP 7은 이 취약점이 공개되기 직전에 EOL 상태에 도달했습니다.
  2. PHP 관리자가 제공하는 공식 패치는 없습니다.
  3. 이 취약점은 일반적으로 사용되는 데이터베이스 기능에 영향을 미칩니다.

기술적 세부 사항 및 공격 시나리오

 

이 취약점은 PDO SQLite 드라이버의 인용 메커니즘에서 발생합니다. 애플리케이션에서 PDO::quote() 함수를 사용하여 사용자 입력을 SQL 쿼리에 포함하기 전에 사용자 입력을 살균하는 경우(일반적인 보안 관행), 이 함수는 매우 긴 문자열을 제대로 처리하지 못합니다.

다음은 공격이 어떻게 전개될 수 있는지에 대한 간단한 설명입니다:

  1. 공격자가 PHP를 사용하는 웹 애플리케이션을 PDO SQLite로 식별합니다.
  2. 취약한 입력 필드에 비정상적으로 긴 문자열을 제공합니다.
  3. 애플리케이션은 살균을 위해 이 문자열을 PDO::quote()로 전달합니다.
  4. 정수 오버플로로 인해 인용 함수가 문자열을 올바르게 이스케이프 처리하지 못했습니다.
  5. 잘못된 입력으로 인해 SQL 인젝션이 발생하여 공격자가 임의의 SQL 명령을 실행할 수 있습니다.

예를 들어 취약한 애플리케이션에는 다음과 유사한 코드가 포함되어 있을 수 있습니다:


// 취약한 코드 패턴

사용자 입력 = $_POST['user_input']; // 공격자 제어 입력

db = new PDO('sqlite:database.sqlite');

safeInput = db->quote($userInput); // 취약한 언제 input 이 매우 long

쿼리 = "SELECT * FROM users WHERE name = 안전 입력";

 

이 시나리오에서 $userInput이 특정 길이를 초과하면 살균이 실패하여 개발자가 적절한 보안 관행을 사용하려고 해도 SQL 인젝션이 허용될 가능성이 있습니다.

위험 증폭 요인

 

이 취약점을 특히 우려하게 만드는 몇 가지 요인이 있습니다:

  1. 높은 CVSS 점수(9.1): 심각한 잠재적 영향을 미치는 중대한 보안 문제를 나타냅니다.
  2. 공개 시기: PHP 7이 EOL에 도달한 직후에 출시되어 사용자에게 공식적인 해결 경로가 없었습니다.
  3. 공통 기능: PDO는 PHP 애플리케이션의 데이터베이스 작업에 널리 사용됩니다.
  4. 보안에 대한 잘못된 인식: 개발자는 PDO::quote()를 사용하여 SQL 인젝션으로부터 보호하고 있다고 생각합니다.
  5. 제한된 인식: 대부분의 보안 게시판에는 PHP 7의 취약점에 대한 언급이 없습니다.

당사의 솔루션: PHP 7에 대한 무한 라이프사이클 지원

 

이 취약점의 중대한 특성과 PHP 7 사용자에게 미치는 영향을 인식하여 당사는 다음과 같은 조치를 취하고 있습니다:

  1. PHP 7 패키지 패치: CVE-2022-31631 취약점을 수정하는 PHP 7 패키지를 개발하여 철저한 테스트를 거쳤습니다.
  2. 크로스 플랫폼 지원: 패치된 패키지는 Windows 및 Linux 환경 모두에서 사용할 수 있습니다.
  3. 포괄적인 보안 범위: 확장된 지원은 이 취약점뿐만 아니라 PHP 7에 영향을 미치는 모든 알려진 보안 문제를 다룹니다.

권장 완화 전략

 

조직에서 PDO SQLite와 함께 PHP 7을 사용하는 경우 다음과 같은 즉각적인 조치를 취하는 것이 좋습니다:

  1. 보안 패치 적용: 이 취약점으로부터 보호하려면 패치된 PHP 7 패키지를 설치하세요.
  2. 매개 변수화된 쿼리 사용: quote() 함수에 의존하는 대신 PDO 준비된 문으로 전환합니다:

stmt = db->prepare("SELECT * FROM users WHERE name = ?");$stmt->execute([$userInput]);

  1. 입력 길이 유효성 검사 구현: 사용자 입력의 길이를 합리적인 값으로 제한합니다.
  2. 데이터베이스 권한 고려: 데이터베이스 사용자에게 최소 권한 원칙 적용

 

결론

 

CVE-2022-31631은 보안 위험 요소의 퍼펙트 스톰을 나타냅니다. PHP 7이 EOL 상태에 도달한 직후에 공개된 중대한 SQL 인젝션 취약점으로, 개발자가 의존하는 일반적인 보안 메커니즘에 영향을 미칩니다. PHP 7을 실행하는 조직은 즉각적인 마이그레이션(잠재적인 호환성 문제 포함) 또는 취약한 시스템을 계속 실행하는 것 사이에서 어려운 선택에 직면하게 됩니다.

확장된 PHP 7 지원 서비스는 세 번째 옵션을 제공합니다. CVE-2022-31631과 같은 중요한 보안 취약점이 보안 패치를 통해 해결되었으므로 안심하고 PHP 7 애플리케이션을 계속 실행할 수 있습니다.

 

요약
심각한 SQL 인젝션 결함에 취약한 PHP 7 CVE-2022-31631
기사 이름
심각한 SQL 인젝션 결함에 취약한 PHP 7 CVE-2022-31631
설명
CVSS 3 점수가 9.1점인 심각한 SQL 인젝션 취약점인 CVE-2022-31631은 PHP 7 설치에 영향을 미칩니다. 발견에 대해 자세히 알아보기
작성자
게시자 이름
TuxCare
게시자 로고

4,500명 이상의 Linux 및 오픈 소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.

목차
필요한 오픈 소스 보안에 대한 답변 얻기

4,500명 이상의 Linux 및 오픈 소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.