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 ได้ครับ
โดยช่องโหว่จะเกิดในช่วง 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
Post a Comment