JVN#20502807: Snoopy における OS コマンドインジェクションの脆弱性
脆弱性を解消したバージョン1.2.4がリリースされている。
ver.1.2.3
$safer_URI = strtr( $URI, "\"", " " ); // strip quotes from the URI to avoid shell access↓
exec($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\"",$results,$return);
ver.1.2.4
exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return);
影響があるのは、ユーザーが任意のURIを入力できる場合で、httpsスキームで始まり不正な文字を含むURIを入力された場合。(ダブルクォートのみは1.2.3でもエスケープされる。)
httpスキームの場合はこの関数(_httpsrequest())を通らないので影響無し。(httpの場合はcURLを使わずにsocketを開いてガリガリ書いている。)
ところでescapeshellcmd()でエスケープしているが、escapeshellarg()じゃなくていいんだろうか?
また、スクレイピングライブラリのhtmlSQLはSnoopyを内部的に使っているが、htmlSQLはhttpスキームのみを受け付けているので影響無し。(改造していない限りは。)