メインコンテンツ

相対パスからライブラリを読み込むと、外部アクターの制御を受ける可能性があります

相対パスで読み込まれたライブラリは悪意のある攻撃に対し脆弱である

説明

この欠陥は、外部ライブラリを読み込むライブラリ読み込みルーチンで相対パスが使用された場合またはまったくパスが使用されなかった場合に発生します。

リスク

外部ライブラリの読み込みに相対パスを使用するかパスを使用しないことで、プログラムでは、安全でない検索プロセスがライブラリの検索に使用されます。攻撃者は検索プロセスを制御して、想定されているライブラリを攻撃者独自のライブラリに置き換えることができます。

修正方法

外部ライブラリを呼び出す際は絶対パスを指定します。

すべて展開する

#include <dlfcn.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>

void relative_path()
{
    dlopen("liberty.dll",RTLD_LAZY);
}

この例では、dlopen が、ライブラリの名前のみを呼び出すことでライブラリ liberty を開いています。しかし、ライブラリのこの呼び出しでは相対パスを使用してライブラリが検索されるため、安全ではありません。

修正 — ライブラリへの絶対パスを使用

1 つの修正方法として、ライブラリをプログラムに読み込む際にライブラリへの絶対パスを使用します。

#include <dlfcn.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>

void relative_path()
{
    dlopen("/home/my_libs/library/liberty.dll",RTLD_LAZY);
}

結果情報

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

バージョン履歴

R2015b で導入