27 septembre 2017

hra-space - erreur "Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée"



Suite à un upgrade HRaSpace en 7.40.010
Lorsqu’on se connectait directement depuis le serveur Tomcat tout se passait correctement :
2017-09-27 07:32:15,851 [   1.2.3.4][                         ] INFO  portl - PORTL???? Detected browser : Internet Explorer 11
2017-09-27 07:32:21,544 [   1.2.3.4][                         ] INFO  ophrc - OPHRC1102 User <S12345678.FRA> connected [Virtual session=e1OPVBEdZpN5FAlSrNcJvA3IHs6w4rIEUr5DYgFmU3usjiWLChvvUGPd9jd2f7gA]
...
è
Mais après une authentification LDAP correcte via le Apache en frontal de l’application... Erreur HTTP 500.

Ceci est lié à une nouvelle fonctionnalité de sécurité : il est nécessaire maintenant de spécifier dans la topologie système les sources approuvées dans le filtre CSRFOriginFilter au niveau de chaque fonction de type "Web" (ex: hra-space, hr-rich-client, hr-portlets, hr-dms, ...).



Dans les logs :

2017-09-27 07:08:37,255 [     1.2.3.4][                         ] INFO  portl - PORTL???? Detected browser : Internet Explorer 11
2017-09-27 07:08:46,931 [     1.2.3.4][                         ] WARN  CSRFOriginFilter - [SECURITY][CSRFOriginFilter] Suspicious CSRF attack from IP:1.2.3.4 on URI: /hra-space/portal
2017-09-27 07:08:46,931 [     1.2.3.4][                         ] WARN  CSRFOriginFilter - [SECURITY][CSRFOriginFilter] Strict mode enabled, returning satus code 403 (Forbidden) on URI: /hra-space/portal
2017-09-27 07:08:47,418 [     1.2.3.4][                         ] INFO  ophrc - OPHRC1102 User <S12345678.FRA> connected [Virtual session=RIvBhRkso19mU00l1UJRaTlWI835XKT8m3q2AzqsdlcLhwmEE8LGxY6zycbbIQP6]
2017-09-27 07:08:47,421 [     1.2.3.4][                         ] ERROR portl - PORTL9999 Exception
java.lang.IllegalStateException: Impossible de créer une session après que la réponse ait été envoyée
       at org.apache.catalina.connector.Request.doGetSession(Request.java:3058)
       at org.apache.catalina.connector.Request.getSession(Request.java:2430)
       at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:897)
       at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:909)
...       at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
       at java.lang.Thread.run(Thread.java:722)
2017-09-27 07:08:47,423 [     1.2.3.4][                         ] INFO  portl - PORTL???? Detected browser : Internet Explorer 11
2017-09-27 07:08:47,423 [     1.2.3.4][                         ] ERROR initializationFilter - PORTL9999 Exception
java.lang.IllegalStateException: Impossible d''utiliser faire-suivre (forward) après que la réponse ait été envoyée
       at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:347)
       at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
       at com.hraccess.portal.filter.HRPortalConnectionFilter.redirectLogin(HRPortalConnectionFilter.java:750)
       at com.hraccess.portal.filter.HRPortalConnectionFilter.doFilter(HRPortalConnectionFilter.java:494)
...       at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
       at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
       at java.lang.Thread.run(Thread.java:722)



Dans la topologie système
Paramètre technique "security.csrf.origin.source
Exemple : security.csrf.origin.source=www.mycompany.fr





Il est possible de spécifier jusqu'à 10 sources grâce aux paramètres techniques "security.csrf.origin.source.<n°>" (ex : security.csrf.origin.source.0=my.secure.host.com ... security.csrf.origin.source.9=another.secure.host.fr)


Dans notre cas l'erreur venait de ce que l'Apache était présent sur une machine distincte de celle du Tomcat.

Dans les logs de hr-rich-client, on trouvera aussi des warnings indiquant l'IP des postes à l'origine des publications :

2017-09-28 16:58:40,091 [    1.2.3.5][                         ] WARN  CSRFOriginFilter - [SECURITY][CSRFOriginFilter] Suspicious CSRF attack from IP:1.2.3.5 on URI: /hr-rich-client/hrservlet/HRAdmin
2017-09-28 16:58:40,092 [    1.2.3.5][                         ] WARN  CSRFOriginFilter - [SECURITY][CSRFOriginFilter] Strict mode enabled, returning satus code 403 (Forbidden) on URI: /hr-rich-client/hrservlet/HRAdmin
2017-09-28 16:58:40,092 [    1.2.3.5][                         ] INFO  ServletAdmin - HRWEB1029 Publishing LFAs (user U1234567)
2017-09-28 16:58:40,124 [    1.2.3.5][                         ] INFO  hrweb - HRWEB1040 publishing tree is TA0FR

 
 
Le paramètre technique "security.csrf.token.filter" est par défaut à "strict". 
Il peut si besoin être forcé à "disable".

 

Aucun commentaire:

Enregistrer un commentaire