RACE CONDITION#2

RACE CONDITION#2
ใน lab 2 นี้จะเป็นอีกตัวอย่างนึง โดยใน lab นี้ตัว application โดย application ในที่นี้มีชื่อว่า “toctou” ซึ่งมีการกำหนด file permission ไว้ให้ sticky bit เป็น 1 และ owner เป็น root ดังนั้นเราจะสามารถรัน application ได้ด้วยสิทธิ์ root โดย application จะเริ่มจากการเปิดไฟล์ให้เราระบุชื่อไฟล์ จากนั้นจะรับการ input จาก user เพื่อนำไปต่อท้ายไฟล์ที่เราระบุไว้ตอนเริ่มรัน application โดยจะมีการเช็คว่าไฟล์นั้นเรามีสิทธิ์ในการเขียนหรือไม่ หากมีก็จะทำการเขียนแต่หากไม่ก็จะแสดงข้อความว่า “no permission”  หลังจากเช็คสิทธิ์เรียบร้อยแล้วก็จะทำการเขียนในไฟล์ดังกล่าว
โดยช่องโหว่จะเกิดในช่วง delay หลังจากที่ผ่านการ check ด้วย access() function ไปแล้วครับ โดยในที่นี้เราจะพยายามแก้ไขไฟล์ sudoer เพื่อเพิ่มสิทธิ์ของ user noob ให้สามารถรันคำสั่ง root ได้ครับ
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define DELAY 5

int main(int argc, char * argv[])
{
 char *fileName = argv[1];
 char buffer[1000];
 int i;
 FILE *fileHandler;
 /* get user input */
 //scanf("%s", buffer);
 scanf("%[^\t\n]s",buffer);
 if(access(fileName, W_OK)!=0)
 {
  printf("No permission\n");
 }
 else 
 {
  /*Simulating the Delay*/
  sleep(DELAY);
  fileHandler = fopen(fileName, "a+");
  fwrite("\n", sizeof(char), 1, fileHandler);
  fwrite(buffer, sizeof(char), strlen(buffer), fileHandler);
  fclose(fileHandler);
 }
}

Comments

Popular Posts