salt w crypt z glibc 2.17

Rafał Janiczek rafal.janiczek at gmail.com
Wed Jun 5 16:20:49 CEST 2013


Hej,

Dzisiaj zauważyłem, że nowe glibc ma jakieś problemy z crypt. A dokładniej
z "$" na pierwszej lub drugiej pozycji salta. Akurat tak się pechowo
złożyło, że hasło w htpasswd wygenerowało się z $ na  drugiej pozycji i po
aktualizacji zestawu lighttpd +glibc serwer www wylatywał przy próbuje
autoryzacji.

Szukając problemu doszedłem do czegoś takiego:

# cat glibc-test.c ; gcc glibc-test.c -o glibc-test -l crypt; strace -o
strace.log ./glibc-test ; tail strace.log ; rpm -q glibc
#include <stdio.h>
#include <crypt.h>

int main(void) {
    char *ok = "aaaaaaaaa";
    char *ble = "a$aaaaaaa";

    puts(crypt(ok, ok));
    puts(crypt(ble, ok));
    puts("A teraz...");
    puts(crypt(ok, ble));
}

aakcR08PK3l1o
aa4Q3qpgbUtfg
A teraz...
Segmentation fault
mprotect(0x7f43ef2b6000, 4096, PROT_READ) = 0
mprotect(0x7f43ef507000, 4096, PROT_READ) = 0
munmap(0x7f43ef4fc000, 40542)           = 0
open("/proc/sys/crypto/fips_enabled", O_RDONLY) = -1 ENOENT (No such file
or directory)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 9), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x7f43ef505000
write(1, "aakcR08PK3l1o\n", 14)         = 14
write(1, "aa4Q3qpgbUtfg\n", 14)         = 14
--- {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x8} (Segmentation
fault) ---
+++ killed by SIGSEGV +++
glibc-2.17-3.x86_64

To samo się dzieje na glibc 2.17-5 oraz w wersji i686. Nie ma problemu z
wcześniejszymi, 2.16 i 2.14.1-4.

-- 
Rafał Janiczek


More information about the pld-devel-pl mailing list