PHP 7.3.3/7.2.16/7.1.27
PHP 7 ChangeLog を並べ直してみただけです。Security Releaseとはいうものの、各バグの危険度がまだ評価されていないので待ち
いくつかでました。あ、まだ詳しく追ってないので評価は鵜呑みにしないでください。
せっかちな人のための結論
現時点で明らかになっている脆弱性を見る限り、外部から直接攻撃される可能性が比較的低めです。以下のいずれかを満たす必要があります
- 外部から提供された画像ファイルをアップロードされ、それをexif処理する可能性がある
- CMS
- wiki
- phpコードをサーバ管理者以外がアップロードされうる
- 共有レンタルサーバなど
発行されたCVE
-
Core: rename() ということはシチュエーションは非常に限られます。別の脆弱性と併用するか、phpコードの設置者がサーバ管理者と完全同一ではない場合(例えばSaSSや共有レンタルサーバなど)の場合のみ直接脅威であると言えるのではないかと思います。
- CVE-2019-9637 = #77630 ※再現コードが明示されていないので未検証
-
EXIF: wikiやCMSなどで不特定多数の作った画像ファイルを受け取る可能性がある場合に危険度たかし
- CVE-2019-9638 = #77563
- CVE-2019-9641 = #77509 ※手元では再現できず
- CVE-2019-9640 = #77540
他に怪しいBug
- privateになっているので詳細不明。他の修正の差分を取り除いて洗い出すしかないかな?
- Core #77329
試した環境
テストコードが提示されている、EXIFに限って調べてみました。
CVE-2019-9638,CVE-2019-9640 のみですが全ての環境で陽性です。CVE-2019-9641 はどうやって未再現できず。もしかして32bit onlyか、64bitでは別のダミーファイルが必要なのかも。
- php 7.2.14 (selfrpm) on Amazon Linux 2
- php 5.5.38 on Amazon Linux
- php 5.6.40 (selfbuild) on CentOS 6.10
Changelog
Module | 7.x | Link | Note |
---|---|---|---|
Core | 3,2 | #77589 | Core dump using parse_ini_string with numeric sections |
Core | 3 | #77329 | Buffer Overflow via overly long Error Messages |
Core | 3 | #77494 | Disabling class causes segfault on member access |
Core | 3 | #77498 | Custom extension Segmentation fault when declare static property |
Core | 3 | #77530 | PHP crashes when parsing (2)::class
|
Core | 3 | #77546 | iptcembed broken function |
Core | 3,2,1 | #77630 | rename() across the device may allow unwanted access during processing |
COM | 3,2 | #77621 | Already defined constants are not properly reported |
COM | 3 | #77626 | Persistence confusion in php_com_import_typelib() |
EXIF | 3,2,1 | #77509 | Uninitialized read in exif_process_IFD_in_TIFF |
EXIF | 3,2,1 | #77540 | Invalid Read on exif_process_SOFn |
EXIF | 3,2,1 | #77563 | Uninitialized read in exif_process_IFD_in_MAKERNOTE |
EXIF | 3,2,1 | #77659 | Uninitialized read in exif_process_IFD_in_MAKERNOTE |
Mbstring | 3 | #77514 | mb_ereg_replace() with trailing backslash adds null byte |
MySQL | 3,2 | Disabled LOCAL INFILE by default, can be enabled using php.ini directive mysqli.allow_local_infile for mysqli, or PDO::MYSQL_ATTR_LOCAL_INFILE attribute for pdo_mysql. |
|
OpenSSL | 3 | #77390 | feof might hang on TLS streams in case of fragmented TLS records |
PDO_OCI | 3,2 | Support Oracle Database tracing attributes ACTION, MODULE, CLIENT_INFO, and CLIENT_IDENTIFIER. |
|
PHAR | 3,2,1 | #77396 | Null Pointer Dereference in phar_create_or_parse_filename |
PHAR | 3,1 | #77586 | phar_tar_writeheaders_int() buffer overflow |
phpdbg | 3 | #76596 | phpdbg support for display_errors=stderr |
SPL | 3,2 | #51068 | DirectoryIterator glob:// don't support current path relative queries |
SPL | 3,2,1 | #77431 | openFile() silently truncates after a null byte |
Standard | 3,2 | #77552 | Unintialized php_stream_statbuf in stat functions |
Standard | 3 | #77612 | setcookie() sets incorrect SameSite header if all of its options filled |