感覺現在這種漏洞比較突出。METHOD_NEITHER中的輸出buf爲什麼長度爲0的時候要開發者自己去檢查buf長度合不合理。
雖然沒去看windows源碼,但是,個人感覺一個正常的用戶有兩種情況:
1、buf長度爲0,對應的驅動例程確實也沒有輸出
2、buf長度不爲0,對應的驅動例程確實有輸出。
當一個惡意的ring 3程序,朝2發DeviceIoControl(。。。,OutputBuffer,OutputBufferLength = 0,。。。)的時候,
假設原來2中的代碼應該是:
*(ULONG*)(OutputBuffer) = 1;
IoStatus.information = 4;
IoCompleteRequest();
那麼上面的代碼中用戶自己沒有判斷此次的輸出buf長度,而系統也不檢測長度,系統認爲用戶自己會去判斷,所以,系統就直接寫了。