Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Вроде как уязвимость в компиляторах(?)   Найти похожие ветки 

 
ZiTRaX ©   (2007-01-31 00:07) [0]

Если этот код скомпилировать в TurboDelphi (да и в FPC 2.0.4), то получается, что эти компиляторы уязвимы. Вообще-то это был код, проверяющий уязвимости в С(Си) - компиляторах (и борландовский компилятор оказался с этой уязвимостью), но мне захотелось проверить это же на паскалевских( мне доступных ) компиляторах.
program Project1;
{$APPTYPE CONSOLE}
var
 i: Integer;
begin
 i := -1;
 WriteLn("Check compiler whether correct deal with sizeof operator");
 WriteLn(" by alert7@xfocus.org");
 WriteLn(SizeOf(Integer));
 if (-1 > 4)
  then WriteLn("This compiler is not vuln")
  else WriteLn("This compiler is vuln!!!");
 if (i > SizeOf(Integer))
  then WriteLn("This compiler is not vuln")
  else WriteLn("This compiler is vuln!!!");
 ReadLn
end.

Специально проверял условие и с переменными, и с числами. И оба раза выдавалось сообщение об уязвимости(?)
Получается, что условия, в которых идёт сравнение отрицательного с положительным, будут работать неправильно, если не знать этой мелочи? Или я что-то не так понял???


 
Olivetti   (2007-01-31 00:29) [1]

2 ZiTRaX ©

Какой у тебя диагноз?


 
TUser ©   (2007-01-31 00:36) [2]

Полагаю, что оба рааза будет vuln, правда хочу узнать, что такое вульн.


 
Axis_of_Evil ©   (2007-01-31 00:40) [3]


> Полагаю, что оба рааза будет vuln, правда хочу узнать, что
> такое вульн.

vulnerable (уязвимый).
чей-то я не пойму, в чем уязвимость заключается ..


 
Джо ©   (2007-01-31 00:45) [4]

> if (-1 > 4)
>  then WriteLn("This compiler is not vuln")

То есть, надо полагать, автор кода считает, что -1 больше, чем 4?


 
Olivetti   (2007-01-31 00:45) [5]

чей-то я не пойму, в чем уязвимость заключается ..

У меня есть еще одна тестовая программа:

ShowMessage("This compiler is vuln!!!");


 
ZiTRaX ©   (2007-01-31 00:50) [6]

2 Olivetti: Диагноз таков: с таким не живут, но служить можно -))
2 Axis_of_Evil: В чём заключается уязвимость я не знаю (поэтому у меня стоят вопросы), но вот что было написано в исходнике, который проверяется эта уязвимость:
* check_compiler_sizeof_vulnerability.c
*
* Check compiler whether correct deal with sizeof operator,
* which can cause integer overflow if you careless use !!!
*
* note: some old compiler have this vulnerability!!!!
*
* by alert7@xfocus.org
*
* XFOCUS Security Team
* http://www.xfocus.org
*
* already tested:
*
* BCB6+ent_upd4....................................vuln !!!
* gcc version 4.0.0 20050519 (Red Hat 4.0.0-8).....not vuln
* gcc version 2.95.3-4(cygwin special).............not vuln
* gcc version egcs-2.91.66.........................not vuln
* cc: Sun WorkShop 6 2000/04/07 C 5.1 .............not vuln
* VC6+sp5..........................................not vuln ,thank eyas
* lcc version 3.8..................................not vuln ,thank tombkeeper
* evc4+sp4.........................................not vuln ,thank san

2 TUser: А почему оба раза выполняется первая ветка - ведь это вроде как нелогично (отрицательное не может быть больше положительного). Или это какая-то особенная логика компилятора???


 
Kerk ©   (2007-01-31 00:51) [7]

Видимо, некоторые компиляторы воспринимают -1 как High(DWORD)


 
ZiTRaX ©   (2007-01-31 00:53) [8]

2 TUser: А почему оба раза выполняется ВТОРАЯ ветка - ведь это вроде как нелогично (отрицательное не может быть больше положительного). Или это какая-то особенная логика компилятора???
2 Джо: так считаю не я, а компилятор


 
Германн ©   (2007-01-31 00:54) [9]


> TUser ©   (31.01.07 00:36) [2]
>
> Полагаю, что оба рааза будет vuln, правда хочу узнать, что
> такое вульн.


> Джо ©   (31.01.07 00:45) [4]
>
> > if (-1 > 4)
> >  then WriteLn("This compiler is not vuln")
>
> То есть, надо полагать, автор кода считает, что -1 больше,
>  чем 4?
>

См. выше. Поиск по vuln во всех словарях на mail.ru не нашел ничего.
А в TP я проверил. Всё пучком.


 
Olivetti   (2007-01-31 00:56) [10]

То есть, надо полагать, автор кода считает, что -1 больше, чем 4?

Судя по его комментариям, он в этом просто таки уверен.


 
ZiTRaX ©   (2007-01-31 01:04) [11]


> См. выше. Поиск по vuln во всех словарях на mail.ru не нашел
> ничего.
> А в TP я проверил. Всё пучком.

Vuln - сокращённо от vulnerable (как уже тут выше писали). А что именно в ТР пучком?

Хорошо. Объясните мне, какая ветка должна выполняться по условию if (i > SizeOf(Integer)), и я со спокойной душой пойду спать  -)


 
Zeqfreed ©   (2007-01-31 01:04) [12]

> Германн ©   (31.01.07 00:54) [9]

Вводим «vuln» в поле ввода «Стардикта» и первой же строчкой видим вариант «vulnerable» (хотя, все зависит от установленных словарей, конечно).


 
Olivetti   (2007-01-31 01:06) [13]

Объясните мне, какая ветка должна выполняться по условию if (i > SizeOf(Integer)), и я со спокойной душой пойду спать

Если -1 > 4 То Глюк Иначе Норма

P.S. Так все же, какой диагноз? Просто очень интересно...


 
Kerk ©   (2007-01-31 01:12) [14]

Кто-нить на [7] внимание обратит? :)


 
ZiTRaX ©   (2007-01-31 01:17) [15]

2 Kerk: ну, если вместо -1 поставить -2 (-3, -4, ...), то результат такой же.
2 Olivetti: "Если -1 > 4 То Глюк Иначе Норма" - исходя из этого, какой текст должна выдать скомпилированная программа?


 
Zeqfreed ©   (2007-01-31 01:17) [16]

> Kerk ©   (31.01.07 01:12) [14]

Я обратил ;)

Что-то мне подсказывает, что в C (не знаю, как насчет Delphi), sizeof возвращает беззнаковое число (что логично, размер переменной/типа не может быть отрицательным) и -1 берется тоже как целочисленная переменная.

Что подтвержается моим экспериментом:

$ cat ./test.c
#include <stdio.h>

main()
{
printf("%d %d\n", -1 > sizeof(int), -1 > 4);
return 0;
}

$ ./test
1 0


 
Zeqfreed ©   (2007-01-31 01:18) [17]


> берется тоже как целочисленная переменная.

Имел в виду как беззнаковая, разумеется.


 
Olivetti   (2007-01-31 01:18) [18]

Кто-нить на [7] внимание обратит?

Да понятна идея, понятна. Хотя, отказ какого-то компилятора работать с отрицательными числами - не глюк, а, скорее, особенность. Возможно - особенность процессора.

Только и ты на код внимание обрати:

if (-1 > 4)
 then WriteLn("This compiler is not vuln")
 else WriteLn("This compiler is vuln!!!");


 
ZiTRaX ©   (2007-01-31 01:19) [19]

Блин, понимаю, что где-то несу чушь, но не могу понять где. -))


 
Olivetti   (2007-01-31 01:20) [20]

ZiTRaX ©   (31.01.07 01:17) [15]
2 Olivetti: "Если -1 > 4 То Глюк Иначе Норма" - исходя из этого, какой текст должна выдать скомпилированная программа?


"Норму" должна выдавать. А в твоем примере - все наоборот.


 
Германн ©   (2007-01-31 01:21) [21]


> Zeqfreed ©   (31.01.07 01:04) [12]
>
> > Германн ©   (31.01.07 00:54) [9]
>
> Вводим «vuln» в поле ввода «Стардикта» и первой же строчкой
> видим вариант «vulnerable» (хотя, все зависит от установленных
> словарей, конечно).
>

Это да. (Я, кстати, вводил в поле другой программы-переводчика). Но тут налицо некая экстраполяция, которая несовместима с понятием "терминология"! Тут скорее присутствует некая "подначка" от либо автора ветки, либо от авторов вышеуказанного источника!


 
Olivetti   (2007-01-31 01:21) [22]

Блин, понимаю, что где-то несу чушь, но не могу понять где. -))

Должно быть не так:

if (-1 > 4)
then WriteLn("This compiler is not vuln")
else WriteLn("This compiler is vuln!!!");


а вот так:

if (-1 > 4)
then WriteLn("This compiler is vuln!!!")
else WriteLn("This compiler is not vuln");


 
Olivetti   (2007-01-31 01:23) [23]

Но тут налицо некая экстраполяция, которая несовместима с понятием "терминология"!

Скорее - упрощенная форма слова для тех, кто или плохо говорит, или кому лень набирать на клавиатуре.


 
Германн ©   (2007-01-31 01:37) [24]

А!
В сабже то TurboDelphi! А я то говорил про TurboPascal :(
Всё равно, тут дело нечисто :)


 
Zeqfreed ©   (2007-01-31 01:39) [25]

Было бы неплохо увидеть ссылку на оригинальный тест для компиляторов C.


 
ZiTRaX ©   (2007-01-31 01:41) [26]

Я, наверное, путаю праведное с грешным, но вот СИ-шный код:
#include <stdio.h>

int main(int argc, char *argv[])
{
       int i =-1;

       printf("Check compiler whether correct deal with sizeof operator\n");
       printf("  by alert7@xfocus.org \n\n");

       if (i > sizeof ( int ) )
       {
               printf("This compiler is not vuln\n");
       }else
               printf("This compiler is vuln!!!\n");

        getchar();

       return 0;
}

MVS2005 выдаёт первую строку, MinGW 3.4.2 - тоже первую, а BCB6+upd4 и BCB2006 выдают вторую строку. Вот я и решил этот же код в паскалевских компиляторах прогнать. В чём заключается уязвимость (то, что это уязвимость, не моя идея) я не понимаю, но один и тот же код даёт разные результаты. Я вообще запутался, всё в одну кучу смешал и теперь не могу докопаться до истины. Хотя на фиг она нужна, та истина???
Всем спасибо за внимание. Пойду я лучше спать, пока ещё какую-нибудь чушь не сморозил -))


 
Джо ©   (2007-01-31 01:43) [27]

Вероятно, тип возвращаемого значения sizeof в разных компиляторах разный. Бывает беззнаковый (что, в принципе, правильнее), а бывает и со знаком.


 
Zeqfreed ©   (2007-01-31 01:46) [28]

Ну все правильно. -1 интерпретируется по разному в разных компиляторах, только не пойму, почему это «уязвимость»? Да, конечно, можно напороться по незнанию, но, если честно, не могу предложить вариант, когда на практике нужно сравнивать отрицательную величину с размером типа данных.


 
Германн ©   (2007-01-31 01:46) [29]


> Джо ©   (31.01.07 01:43) [27]
>
> Вероятно, тип возвращаемого значения sizeof в разных компиляторах
> разный. Бывает беззнаковый (что, в принципе, правильнее),
>  а бывает и со знаком.
>

А ты хоть когда-то хоть какие-то размеры мерял со знаком? :)


 
Zeqfreed ©   (2007-01-31 01:47) [30]


> -1 интерпретируется по разному в разных компиляторах

Читать как «-1 интерпретируется по-разному в разных компиляторах, потому что см [27]» :)


 
ZiTRaX ©   (2007-01-31 01:51) [31]

http://lists.jammed.com/vulnwatch/2006/02/0006.html - вот одна из ссылок на проверку этой "уязвимости"(?).


 
Джо ©   (2007-01-31 01:52) [32]

> [29] Германн ©   (31.01.07 01:46)
>
> > Джо ©   (31.01.07 01:43) [27]
> >
> > Вероятно, тип возвращаемого значения sizeof в разных компиляторах
>
> > разный. Бывает беззнаковый (что, в принципе, правильнее)
> ,
> >  а бывает и со знаком.
> >
>
> А ты хоть когда-то хоть какие-то размеры мерял со знаком?
> :)

Я говорю о типе возвращаемого значения. Например, в Делфи SizeOf возвращает Integer, т.е., именно тип со знаком.


 
Zeqfreed ©   (2007-01-31 01:54) [33]

Видимо, где-то в каком-то стандарте описано, что sizeof должен быть беззнаковым и компиляторы, в которых это правило не соблюдается, считаются «уязвимыми». Не понимаю, почему это так важно? :) Ну а Delphi тут вообще не при чем.


 
Германн ©   (2007-01-31 02:06) [34]


> Джо ©   (31.01.07 01:52) [32]
>
> > [29] Германн ©   (31.01.07 01:46)
> >
> > > Джо ©   (31.01.07 01:43) [27]
> > >
> > > Вероятно, тип возвращаемого значения sizeof в разных
> компиляторах
> >
> > > разный. Бывает беззнаковый (что, в принципе, правильнее)
> > ,
> > >  а бывает и со знаком.
> > >
> >
> > А ты хоть когда-то хоть какие-то размеры мерял со знаком?
>
> > :)
>
> Я говорю о типе возвращаемого значения. Например, в Делфи
> SizeOf возвращает Integer, т.е., именно тип со знаком.

И я об этом. Но компиллятор в подобных случаях должен быть "умным".
Даже в стародавнем ТР функция SizeOf возвращала Integer, но всегда её результат был положительным!


 
Германн ©   (2007-01-31 02:15) [35]


> Даже в стародавнем ТР функция SizeOf возвращала Integer,
>  но всегда её результат был положительным!

Вот например:
var TT : array[0..33000] of Byte;
begin
WriteLn(SizeOf(TT));

напечатало 33001. А в ТР Integer = (-32768..32767).


 
Джо ©   (2007-01-31 02:27) [36]

Германн ©
> Но компиллятор в подобных случаях должен быть "умным".
Ну вот, наверное, приведенный C-код и тестирует умность некоторых компиляторов :)


 
Германн ©   (2007-01-31 02:31) [37]


> Джо ©   (31.01.07 02:27) [36]
>
> Германн ©
> > Но компиллятор в подобных случаях должен быть "умным".
>
> Ну вот, наверное, приведенный C-код и тестирует умность
> некоторых компиляторов :)

А где тут "приведенный С-код"? Сколь не искал, не нашел:(


 
Джо ©   (2007-01-31 02:32) [38]

> [26]

[26]


 
Германн ©   (2007-01-31 02:42) [39]


> Джо ©   (31.01.07 02:32) [38]
>
> > [26]
>

Не читал ранее сей пост :(
Тогда пусть автор сабжа проспится и повторит свой экс-мент :) Если и завтра всё будет неправильно, тогда продолжим обсуждение.


 
Verg ©   (2007-01-31 06:34) [40]

Константы по умолчанию - int. Т.е. -1 > 4 ->> false
Сравнение int и unsigned int - компилятор обязан преобразовать к наибольшему по знаковости, т.е. к unsigned int, т.о. сравнение i > sizeof(i), где
эквивалентно cardinal(-1) > cardinal(4) ->> true при i = -1

P.S. Wanrnings компилера даны не для того, чтобы их воспринимать как чью-то шутку.


 
pasha_golub ©   (2007-01-31 10:02) [41]


> Verg ©   (31.01.07 06:34) [40]


> P.S. Wanrnings компилера даны не для того, чтобы их воспринимать
> как чью-то шутку.

Золотые слова. И хинты тоже не для красного словца.


 
ZiTRaX ©   (2007-01-31 10:09) [42]

Пинайте автора ветки ногами, чтобы он больше не садился за комп в нетрезвом состоянии и не писал такую чушь. Даже не могу вспомнить, чем я руководствовался, кода писал весь этот бред (особенно интересно, зачем я сюда присобачил паскалевские компиляторы).
Я так точно когда-нибудь попаду в орешник. -))


 
Desdechado ©   (2007-01-31 11:49) [43]

ZiTRaX ©   (31.01.07 10:09) [42]
Пинаю.

ЗЫ вот полуночники...

ЗЫ2 поддерживаю Verg ©   (31.01.07 06:34) [40]
и дополню, что, имхо, в некоторых компиляторах это поведение можно настраивать (что должен осознавать пользователь сего компилятора)


 
Amoeba ©   (2007-01-31 16:53) [44]


> ZiTRaX ©   (31.01.07 10:09) [42]
>
> Пинайте автора ветки ногами, чтобы он больше не садился
> за комп в нетрезвом состоянии и не писал такую чушь. Даже
> не могу вспомнить, чем я руководствовался, кода писал весь
> этот бред (особенно интересно, зачем я сюда присобачил паскалевские
> компиляторы).
> Я так точно когда-нибудь попаду в орешник. -))
>

Чего только не бывает спьяну!


 
Amoeba ©   (2007-01-31 16:54) [45]

Вся ветка просто достойна орешника, но обязательно целиком. Иначе весь аромат пропадет.



Страницы: 1 2 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.044 c
2-1170850723
smaller
2007-02-07 15:18
2007.02.25
Не ловится исключительная ситуация:


2-1170512601
metex
2007-02-03 17:23
2007.02.25
Out of memory. Как с этим бороться?


15-1170300864
SerJaNT
2007-02-01 06:34
2007.02.25
Программа для организации телеконференций по сети


4-1151045297
novill
2006-06-23 10:48
2007.02.25
Не могу остановить свой сервис


2-1170926132
kilop
2007-02-08 12:15
2007.02.25
как сделать так чтобы при запуске форма появлялась в центре





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский