italia / spid-saml-check

Tool di verifica implementazione SPID SAML
European Union Public License 1.2
72 stars 60 forks source link

Attribute SessionIndex generated incorrectly for SPIDL2 and SPIDL3 AuthnRequests for test cases 31,109,110 #215

Open carlobonamico opened 2 years ago

carlobonamico commented 2 years ago

Problema analogo / correlato a #32, ma su altri casi di test.

Rilevato sulle versioni 1.7.1, 1.8.1, 1.8,2.

Se il Service Provider richiede come livello minimo SPIDL2, il validator invia una risposta di autenticazione positiva SPIDL2 contenente il campo SessionIndex. Se l'applicazione implementa in maniera stringente la specifica

Nel caso di asserzioni emesse a seguito di richieste di autenticazione per il livello SPID 1 l’elemento  deve avere l’attributo SessionIndex specificante l’indice della sessione di autenticazione instaurata per l’utente presso il gestore dell’identità; tale elemento non dovrà essere presente nel caso di asserzioni emesse a seguito di richieste di autenticazione per i livelli SPID 2 e SPID 3.

il test fallisce in quanto viene negato l'accesso per risposte che invece sono di esito positivo.

Gli step necessari per riprodurre il problema sono:

  1. configurare i metadati del validator nell' applicazione
  2. inviare una richiesta di autenticaione SPIDL2 al validator indicando che la modalità di comparison sia "minimum"
        <AuthnContextClassRef xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
            https://www.spid.gov.it/SpidL2
        </AuthnContextClassRef>
    </saml2p:RequestedAuthnContext>
  3. scegliere la Response 31, 109, 110

Nella GUI del Validator si vede che il campo sessionIndex è valorizzato e viene passato nella Response

        <saml:AuthnStatement AuthnInstant="2021-05-31T08:50:16Z" SessionIndex="_45ba6169-6fe9-4a4d-84b6-a8a201eeacb6">
            <saml:AuthnContext>
                <saml:AuthnContextClassRef>
                    https://www.spid.gov.it/SpidL2
                </saml:AuthnContextClassRef>
            </saml:AuthnContext>
        </saml:AuthnStatement>
AleBrusati commented 2 years ago

Buongiorno

Io e il mio team abbiamo rilevato un problema analogo.

Secondo le specifiche tecniche: https://docs.italia.it/italia/spid/spid-regole-tecniche/it/stabile/single-sign-on.html#esempio-di-authnrequest:~:text=higher%20digest%20algorithm.-,Assertion,-MUST, nel caso di "assertions" emesse a seguito di richieste di autenticazione per il livello SPID 1, l'elemento deve avere l'attributo SessionIndex che specifica l'indice della sessione di autenticazione stabilita per l'utente presso l'identity manager.

Questo elemento non deve essere presente nel caso di "assertions" emesse a seguito di richieste di autenticazione per i livelli SPID 2 e SPID 3.

Quando quindi eseguiamo il flusso con validazione, dovremmo aspettarci di non vedere alcun valore nell'attributo sessionIndex.

Ma in realtà otteniamo un valore e il flusso fallisce su questa convalida.

Per Esempio:

 <saml:AuthnStatement AuthnInstant="2022-07-17T11:49:32Z" SessionIndex="_6b189168-bbb7-4e27-b3f7-e9d6f0aa87a1">
           <saml:AuthnContext>
               <saml:AuthnContextClassRef>https://www.spid.gov.it/SpidL2</saml:AuthnContextClassRef>
           </saml:AuthnContext>
       </saml:AuthnStatement>

Se si esegue senza validazione, l'autenticazione passa.