erlug
[Top] [All Lists]

[Erlug] OpenSSH, tanto rumore per nulla ?

To: erlug@xxxxxxxxxxxxxx
Subject: [Erlug] OpenSSH, tanto rumore per nulla ?
From: Davide Bolcioni <w7dmotu6hjru1001@xxxxxxxxxxxxxx>
Date: Fri, 28 Jun 2002 23:18:03 +0200
Saluti,
questo articolo

  http://www.kuro5hin.org/?op=displaystory;sid=2002/6/26/132215/688

pare confermare una mia impressione che vorrei portare come tema
di discussione. Ovvero, il "buco" di OpenSSH esiste ma ha effetto
solo nelle configurazioni con ChallengeResponseAuthentication,
ovvero skey, oppure con PAMAuthenticationViaKbdInt ... entrambi
disabilitati per default in tutti i Linux che ho visto (occhio,
può darsi che io non ne abbia visto abbastanza).

Il tono apocalittico ha portato il sottoscritto a terminare tutti
i demoni ssh a tiro (avete presente "paranoia is an afterthought")
in attesa degli appropriati fix, aggiungo come nota di colore, ed
ora scoprire di cosa si trattava mi ha lasciato di cattivo umore.

La collaborazione con ISS, dopo la recente trovata di Apache, non
aiuta di certo, e neppure aiuta la qualità del codice C nella
patch fornita da ISS:

  http://online.securityfocus.com/archive/1/279117

qui allego il codice:

Index: auth2-chall.c
===================================================================
RCS file: /cvs/src/usr.bin/ssh/auth2-chall.c,v
retrieving revision 1.18
diff -u -r1.18 auth2-chall.c
--- auth2-chall.c       19 Jun 2002 00:27:55 -0000      1.18
+++ auth2-chall.c       26 Jun 2002 09:37:03 -0000
@@ -256,6 +256,8 @@

        authctxt->postponed = 0;     /* reset */
        nresp = packet_get_int();
+ if (nresp > 100) + fatal("input_userauth_info_response: nresp too big %u", nresp);
        if (nresp > 0) {
                response = xmalloc(nresp * sizeof(char*));
                for (i = 0; i < nresp; i++)

Index: auth2-pam.c
===================================================================
RCS file: /var/cvs/openssh/auth2-pam.c,v
retrieving revision 1.12
diff -u -r1.12 auth2-pam.c
--- auth2-pam.c 22 Jan 2002 12:43:13 -0000      1.12
+++ auth2-pam.c 26 Jun 2002 10:12:31 -0000
@@ -140,6 +140,15 @@
        nresp = packet_get_int();       /* Number of responses. */
        debug("got %d responses", nresp);

+
+ if (nresp != context_pam2.num_expected) + fatal("%s: Received incorrect number of responses " + "(expected %u, received %u)", __func__, nresp, + context_pam2.num_expected);
+
+ if (nresp > 100) + fatal("%s: too many replies", __func__);
+
        for (i = 0; i < nresp; i++) {
                int j = context_pam2.prompts[i];

e porto all'attenzione di lor signori che la patch consiste in

  if (nresp > 100)
    ... lamentati ...

dove l'origine del "numero magico" 100 è tutta da chiarire. Di solito
per queste cose si usa #define, oppure in caso di buffer il buon vecchio
sizeof(buffer)/sizeof(buffer[0]).

Infastidisce anche l'impressione che de Raadt abbia voluto utilizzare
la circostanza per imporre l'uso della "privilege separation", anche se
non è detto che le cose stiano in termini così semplici (e poi l'idea a
un primo esame non sembra cattiva: dovrebbe affermarsi per il proprio
merito tecnico, e può darsi che p. es. siano i pigroni delle varie
distribuzioni che non vogliono accettarla per non dover mettere in opera
fastidiosi cambiamenti di infrastruttura che non si possono far passare
per novità).

Commenti ?

Davide Bolcioni
--
There is no place like /home.



<Prev in Thread] Current Thread [Next in Thread>