メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

相対パスからバイナリを実行すると、外部アクターの制御を受ける可能性があります

相対パスを含むコマンドには悪意のある攻撃に対する脆弱性がある

説明

この欠陥は、外部コマンドを相対パスまたはパスなしで呼び出した場合に発生します。

この欠陥では、外部制御されるコマンドの実行の欠陥チェッカーが検出した結果も見つかります。

リスク

外部コマンドの呼び出しに相対パスを使用するかパスを使用しないことで、プログラムでは、安全でない検索プロセスがコマンドの検索に使用されます。攻撃者は、検索プロセスを制御して、想定されているコマンドを攻撃者独自のコマンドに置き換えることができます。

修正方法

外部コマンドを呼び出す際は絶対パスを指定します。

すべて展開する

# define _GNU_SOURCE
# include <sys/types.h>
# include <sys/socket.h>
# include <unistd.h>
# include <stdio.h>
# include <stdlib.h>
# include <wchar.h>
# include <string.h>
# define MAX_BUFFER 100

void rel_path()
{
    char * data;
    char data_buf[MAX_BUFFER] = "";
    data = data_buf;

    strcpy(data, "ls -la");
    FILE *pipe;
    pipe = popen(data, "wb"); 
    if (pipe != NULL) pclose(pipe);
}

この例では、Bug Finder が、ls コマンドへの相対パスを使用して ls -la を呼び出そうとした popen にフラグを設定します。攻撃者は、悪意のあるバージョンが使用されるようコマンドを操作できます。

修正 — 絶対パスを使用

1 つの修正方法として、コマンドを呼び出す際に絶対パスを使用します。

# define _GNU_SOURCE
# include <sys/types.h>
# include <sys/socket.h>
# include <unistd.h>
# include <stdio.h>
# include <stdlib.h>
# include <wchar.h>
# include <string.h>
# define MAX_BUFFER 100

void rel_path()
{
    char * data;
    char data_buf[MAX_BUFFER] = "";
    data = data_buf;

    strcpy(data, "/usr/bin/ls -la");
    FILE *pipe;
    pipe = popen(data, "wb");  
    if (pipe != NULL) pclose(pipe);
}

結果情報

グループ: セキュリティ
言語: C | C++
既定値: オフ
コマンド ライン構文: RELATIVE_PATH_CMD
影響度: Medium

バージョン履歴

R2015b で導入