C and C++ Binaries


MISC.CHROOT.NOCHDIR : chdir 無しの chroot 呼び出し

要旨

chroot()が、chdir()への適切なサブシークエントコール無しに呼ばれています。 chdir()へのサブシークエントコールは、もし下記の両方が真であるならば、適切とみなされます。

プロパティ

クラス名 chroot without chdir
日本語クラス名 chdir 無しの chroot 呼び出し
クラス分類 セキュリティ (security)
ニーモニック MISC.CHROOT.NOCHDIR
カテゴリー
MisraC2023 MisraC2023:D.4.13 Functions which are designed to provide operations on a resource should be called in an appropriate sequence
Misra2012 Misra2012:D.4.13 Functions which are designed to provide operations on a resource should be called in an appropriate sequence
CWE CWE:243 Creation of chroot Jail Without Changing Working Directory
  CWE:676 Use of Potentially Dangerous Function
CERT-C CERT-C:POS05-C Limit access to files by creating a jail
BSI BSI:CHROOT-01  
  BSI:CHROOT-02  
  BSI:CHROOT-03  
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="chroot without chdir"
全ての BSI 固有の BADFUNC クラスを含む BSI 関連クラスを有効にするには、 bsi 設定プリセットを使用してください。

#include <unistd.h>
#include <stdio.h>

int chroot_no_chdir(const char *fname, char *buf){
    FILE *localfile;
    int bytesread=0;
    if (chroot("/downloaddir")==-1){return 0;} /* 'chroot without chdir' warning issued here:
                                                *  there is at least one path on which chdir() is not subsequently called */
    if (fname){
        if (localfile = fopen(fname, "r")){
            bytesread = fread(buf, 1, sizeof(buf), localfile);
            fclose(localfile);
        }
        if (chdir("/")==-1){return 0-bytesread;}        /* chdir() is only called if fname!=NULL - not on all paths */
    }
    return bytesread;
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。