﻿# V1118\. Excessive file permissions can lead to vulnerabilities\. Consider restricting file permissions\.

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

Анализатор просматривает следующие системные вызовы на наличие избыточных прав доступа: [`open`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html), [`creat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/creat.html), [`openat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html), [`chmod`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html), [`fchmod`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmod.html), [`fchmodat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html), [`mkdir`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html), [`mkdirat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html), [`mkfifo`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkfifo.html), [`mkfifoat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkfifo.html), [`mknod`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mknod.html), [`mknodat`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mknod.html), [`mq_open`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_open.html), [`sem_open`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_open.html)\.

Рассмотрим пример:

```cpp
void foo(int param)
{
  int parms = 0777;
  int fd = open("/path/to/file", O_CREAT | O_RDONLY, parms);
  if (fd < 0) return;
 
  // some work

  close(fd);
}
```

В коде происходит вызов системного вызова [`open`](https://pubs.opengroup.org/onlinepubs/007904875/functions/open.html) для открытия файла и последующей работы с информацией оттуда\. Если файл не существует, он будет создан \(флаг `O_CREAT` во втором аргументе\) с правами доступа, переданными числом в качестве третьего аргумента\. В данном случае маска `0777` позволяет любому произвольному пользователю читать, писать или исполнять этот файл, что может привести к уязвимости\.

Исправить ошибку можно, изменив маску доступа:

```cpp
void foo(int param)
{
  int parms = 0644;
  int fd = open("/path/to/file", O_CREAT | O_RDONLY, parms);
  if (fd < 0) return;
 
  // some work

  close(fd);
}
```