Member 14074589 Ответов: 3

Linux C программа использующая filename в качестве аргумента


Следующая программа Linux C принимает имя файла в качестве аргумента каковы проблемы безопасности с этим?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])  {
char buf[128];
if (argc != 2) {
fprintf(stderr, "usage: %s <filename>\n", argv[0]);
exit(1);
}
strcpy(buf, "cat " );
strcat(buf, argv[1]);
system(buf);
return 0;
}


Что я уже пробовал:

Я просто новичок в программировании Linux C и все еще копаюсь в нем.
Разве большинство команд не используют имена файлов в качестве аргументов?

3 Ответов

Рейтинг:
2

CPallini

Вы правы, большинство программ используют имена файлов в качестве аргументов.
Однако ваш код может привести к переполнению буфера, поскольку вы используете strcat. Использовать strncat[^] вместо.


Рейтинг:
2

Member 14074589

Это означает, что при переполнении буфера в этом случае уязвимость возрастает для эксплуатации.
Отличная рекомендация использовать вместо этого strncat [^]. Спасибо!


Рейтинг:
0

Richard MacCutchan

Команды используют имена файлов в качестве аргументов только в том случае, если они намереваются читать из них или записывать в них. Кроме того, все аргументы будут специфичны для фактической команды и могут быть любыми, что команда должна контролировать свое поведение.


Member 14074589

Отметила, спасибо, Ричард.
Итак, к моему первоначальному вопросу:
Специфично ли для программирования Linux C, что наличие имени файла в качестве аргумента вообще создает какую-либо проблему безопасности?

Richard MacCutchan

В каком смысле вы имеете в виду импликацию безопасности?

Member 14074589

Извините, я пропустил ваш вчерашний вопрос.
Если имя файла используется в качестве аргумента для сброса содержимого, то какие проблемы безопасности/последствия могут возникнуть? Может ли быть передача данных/информации непреднамеренной третьей стороне? Или любая другая проблема безопасности? И как это произойдет технически?

Richard MacCutchan

Проблема не имеет никакого отношения к вашей программе.

Если файл содержит защищенную информацию, то он не должен храниться там, где любое приложение может получить к нему доступ. Он также должен быть зашифрован надежным паролем.