CWE-134 Use of Externally-Controlled Format String 概要:外部から入力される文字列をそのまま書式文字列として渡すこと サンプル:入力される文字列がprintf関数の第一引数になっているため 書式指定子を入力するとそれに応じた結果が出力されてしまう 43 https://cwe.mitre.org/data/definitions/134.html 外部からの入力を そのまま出力させたいのなら printf(“%s”,buf)にすべきだった
CWE-242 Use of Inherently Dangerous Function 概要:安全に動作する保証のない関数を使うこと サンプル:gets関数はユーザ側が任意の長さの入力をすることが可能 61 https://cwe.mitre.org/data/definitions/242.html getsを使うことがそもそも危険 (後で解説するBOFにつながる) ※他にも危険な関数は存在する
C言語における文字列 67 A B C D E F G H I J K L ... 0x80486b4 文字列本体 0x80486b4 alphabetの値 変数(または定数)は 文字列の「アドレス」を保存している ? ? ? ? ? ? ? ? ? ? ? ? ... 0x0(NULL) ???????? 0x0 小文字入力時の pointerの値 アドレスが0の場所には 何もない(アクセス禁止)
read関数でNULL文字(‘\0’)が入らないワケ 125 A A A A \n \0 S E C R E T buffer secret read(0,buffer,6) AAAA(改行) A A A A A \n S E C R E T buffer secret read(0,buffer,6) AAAAA(改行) 1つの文字列 1つの文字列 1つの文字列