💣

`register_argc_argv`はnon-CLIなSAPI環境にどう影響するか

2024/11/13に公開

Laravelの脆弱性に「register_argc_argv = onのときにクエリパラメータ経由で環境変数を操作できる」というのがあったので気になって調べた。
https://github.com/laravel/framework/security/advisories/GHSA-gv7v-rgg6-548h

公式ドキュメントによれば、register_argc_argv

Tells PHP whether to declare the argv & argc variables (that would contain the GET information)

とのこと。

$_SERVER['argv']のほうを見ると、

When called via the GET method, this will contain the query string.

とのことで、register_argc_argv = onなnon-CLI環境においてはクエリストリングが引数として扱われるということらしい。

argvを見るような処理を外部から起動できる場合、この性質を使えば任意の引数を渡すことができる。他にもさまざまなプロジェクトが影響を受けていた。

参照: CactiのPOC

Discussion