ISO/IEC TS 17961 [usrfmt]

Включая испорченный или вход вне основной области в строке формата

Описание

Управляйте определением

Включая испорченный или вход вне основной области в строке формата. [1]

Примеры

развернуть все

Описание

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

Описание

Испорченный формат строки обнаруживает форматирование строки с printf- разработайте функции, которые содержат элементы из небезопасных источников.

Риск

Если вы используете внешне управляемые элементы, чтобы отформатировать строку, можно вызвать проблемы представления данных или переполнение буфера. Атакующий может использовать эти элементы форматирования строки, чтобы просмотреть содержимое стека с помощью %x или запишите в стек с помощью %n.

Фиксация

Передайте статическую строку функциям строки формата. Эта фиксация гарантирует, что внешний агент не может управлять строкой.

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

Пример - получает элементы от ввода данных пользователем

#include "stdio.h"

void taintedstringformat(char* userstr) {
    printf(userstr);   
}

Этот пример распечатывает входной параметр userstr. Строка неизвестна. Если это содержит элементы, такие как %, printf может интерпретировать userstr как формат строки вместо строки, заставляя вашу программу отказать.

Коррекция — печать как строка

Одна возможная коррекция должна распечатать userstr явным образом как строка так, чтобы не было никакой неоднозначности.

#include "stdio.h"

void taintedstringformat(char* userstr) {
    printf("%.20s", userstr); 
}

Проверяйте информацию

Разрешимость: неразрешимый

Введенный в R2019a


[1]  Выписки из стандарта "Техническая характеристика ISO/IEC TS 17961 - 2013-11-15" воспроизводятся с соглашением о AFNOR. Только исходный и полный текст стандарта, как опубликовано Выпусками AFNOR - доступный через веб-сайт www.boutique.afnor.org - имеет нормативное значение.