
CVE-2020-15778に関する技術的解説と概念実証。これはOpenSSH scp(<=8.3p1)における認証済みコマンドインジェクションの脆弱性であり、ファイルパス内のバックティックペイロードを介してリモートコード実行を可能にします。
メールアドレス : [email protected]
LinkedIn : www.linkedin.com/in/chinmay-pandya
製品: Openssh
影響を受けるコンポーネント: SCP
脆弱性のあるバージョン: <=openssh-8.3p1
修正バージョン: -
CVE 番号: CVE-2020-15778
脆弱性のある行: https://github.com/openssh/openssh-portable/blob/a2855c048b3f4b17d8787bd3f24232ec0cd79abe/scp.c#L989
脆弱性の種類: コマンドインジェクション / Eval インジェクション (認証済み)
攻撃の種類: リモート攻撃
公開タイムライン:
- 問題発見 - 2020年6月9日
- CVE 取得 - 2020年7月16日
- ベンダー通知 - 2020年6月9日
- ベンダー確認受信 - 2020年6月9日
- 公開開示 - 2020年7月18日
scp はコンピュータ間でファイルをコピーするためのプログラムです。SSH プロトコルを使用します。ほとんどの Linux および Unix ディストリビューションにデフォルトで含まれています。
リモートサーバーにファイルをコピーする際、ファイルパスがローカルの scp コマンドの末尾に追加されます。 例えば、以下のコマンドを実行すると
scp SourceFile user@host:directory/TargetFile
ローカル側で以下のコマンドが実行されます
scp -t directory/TargetFile
ローカルの scp コマンドを作成する際、ファイル名のサニタイズが行われません。 攻撃者はバックティックが有効なペイロードをファイル名として渡すことができ、ローカルの scp コマンドが実行されると、ローカルシェルもそのペイロードを実行します。
scp で以下のコマンドを実行します
scp /sourcefile remoteserver:'`touch /tmp/exploit.sh`/targetfile'
このコマンドを実行した後、リモートサーバーにログインすると、/tmp/ ディレクトリに exploit.sh ファイルが存在することが確認できます。ファイル名にシングルクォートを使用することで、ローカルシェルでのペイロード実行を防ぐことが重要です。シングルクォートなどのエスケープ文字をファイル名に使用することで、ローカルシェルでのペイロード実行を防ぐことができます。
これは認証済みのエクスプロイトであり、リモートサーバーでコマンドを実行するには有効な SSH / SCP の認証情報が必要です。
scp コマンドは歴史的なプロトコル (rcp と呼ばれる) であり、そのような引数渡しのスタイルに依存しており、展開の問題に遭遇します。 scp モデルに「セキュリティ」を追加することは非常に困難であることが証明されています。異常な引数転送を「検出」および「防止」する試みは、既存のワークフローを壊す可能性が高いです。 はい、状況が最悪であることは認識しています。しかし、一般的な代替手段が登場するまでは、人々が scp に使用している簡単なパターンを壊したくありません。 懸念がある場合は、代わりに rsync などを使用すべきです。
SCP のコード - https://github.com/openssh/openssh-portable/blob/master/scp.c