
OpenPLC-v3 において、コマンドラインから渡されたファイルパスパラメータに対して妥当性チェックを行わないことに起因するパスインジェクションの脆弱性があります。攻撃者は悪意のあるパスを構築することで任意の読み取り可能なファイルを読み取ることができ、情報漏洩のリスクがあります。
不適切な入力検証(パスインジェクション)
情報漏洩(任意ファイル読み取り)
glue_generator.cpp からコンパイルされたバイナリプログラムには、ユーザーが指定したファイルパスの検証不足に起因する任意ファイル読み取りの脆弱性が含まれています。
攻撃者は、プログラムを実行する際の入力引数(例:/etc/passwd)として任意のファイルを指定できます。その後、アプリケーションはファイルを行ごとに読み取り、内容を解析し、解析されたデータを cout を使用してコンソールに直接出力します。このとき、以下の項目に対して一切の検証が行われません。
その結果、攻撃者は実行プロセスの権限コンテキストでアクセス可能な任意のファイルを読み取ることができ、機密情報の漏洩につながります。
悪用に成功すると、以下のような機密システム情報が漏洩する可能性があります。
この情報は、さらなる権限昇格や水平移動に悪用される可能性があります。
glue_generator.cpp では、プログラムは 2 つの文字列配列 varName と varType を使用して、解析されたファイル内容を処理し、コマンドラインに出力します。
解析中、プログラムは次の特定の行形式を期待します。
(<varType>,<varName>,
具体的には次の通りです。
( から最初の , までの内容は varType に割り当てられます。
最初の , から 2 つ目の , までの内容は varName に割り当てられます。
ソースファイルのパスや解析データの正当性に対する検証は一切行われません。
ステップ 1: テストファイルの作成
次の内容で test.txt という名前のファイルを作成します。
(aaaaaaaa,123,
ステップ 2: 脆弱なプログラムの実行
次のコマンドを実行します。
./glue_generator ./test.txt whatever.cpp
プログラムは内容を解析し、抽出された値をコンソールに出力します。
ステップ 3: 任意ファイルの読み取り
攻撃者が機密ファイル(例:/etc/passwd)を変更または制御して、必要な形式に一致するデータを含めることができる場合:
(aaaaaaaa,123,
脆弱なプログラムはそのファイルから対応する内容を解析し、出力します。
機密ファイルの場合、次のパターンに一致する行が漏洩する可能性があります。
(<content1>,<content2>,
漏洩する情報量は以下に依存します。
この脆弱性は以下によって引き起こされます。
脆弱性を軽減するには以下を実施してください。