Dicembre 22, 2024

Alfresco tips & tricks – #13 Errore CSRF Filter su login Share con Apache mod_proxy e SSLEngine on

Nella versione 4.1 di Alfresco è stato introdotto su Share un filtro CSRF per prevenire attacchi di tipo Cross-Site Request Forgery. Se viene utilizzato un web server Apache come front end HTTPS verso Share, potrebbe essere necessario effettuare delle modifiche sulle configurazioni di default del filtro CSRF su Share. In questo articolo ho riportato due possibili soluzioni. Di seguito una tipica configurazione per accedere a Share in VirtualHost su Apache con mod_proxy e direttiva SSLEngine.

Apache SSL VirtualHost

### Apache vhost config: /etc/httpd/conf.d/my_virtual_hosts.conf
###
<VirtualHost *:443>
        ServerName myalfresco.com
        ProxyPass /share http://host:8080/share
        ProxyPassReverse /share http://host:8080/share
        SSLEngine on
        SSLProtocol all
        SSLCertificateFile /secure_path_to_ssl_certs/mycert.crt
        SSLCertificateKeyFile /secure_path_to_ssl_certs/mycert.crt.key
        SSLCertificateChainFile /secure_path_to_ssl_certs/mycert.crt.intermediate
</VirtualHost>

ERRORE  Login Share

INFO [site.servlet.CSRFFilter] [ajp-apr-8009-exec-4] Possible CSRF attack noted when asserting
 referer header 'https://myalfresco.com/share/page/'. Request: POST /share/page/dologin
ERROR [alfresco.web.site] [ajp-apr-8009-exec-4] javax.servlet.ServletException: Possible CSRF attack noted when asserting
 referer header 'https://myalfresco.com/share/page/'. Request: POST /share/page/dologin

SOLUZIONE 1 – Impostare il FQDN su referer e origin

Step1. Copiare la definizione “CSRFPolicy” config di default dal file:
TOMCAT_HOME/webapps/share/WEB-INF/classes/alfresco/share-security-config.xml
nel file:
TOMCAT_HOME/shared/classes/alfresco/web-extension/share-config-custom.xml

Step 2. Aggiungere l’attributo replace=”true” sul config “CSRFPolicy

<config evaluator="string-compare" condition="CSRFPolicy" replace="true">

Step 3. Impostare le proprietà referer e origin con il FQDN (https) usato per il VirtualHost

<config evaluator="string-compare" condition="CSRFPolicy" replace="true">
<properties>
<token>Alfresco-CSRFToken</token>

<!-- Use the pipe | in the regex as OR operator: URL1|URL2|... -->
<referer>https://myalfresco.com/.*</referer>
<origin>https://myalfresco.com</origin>

</properties>
<!-- blablabla -->
</config>

SOLUZIONE 2 – Disabilitare il CSRF Token Filter

Decommentare il config “CSRFPolicy” in:
TOMCAT_HOME/shared/classes/alfresco/web-extension/share-config-custom.xml

<config evaluator="string-compare" condition="CSRFPolicy" replace="true">
      <filter/>
</config>

ERRORE  Admin Console Alfresco (Node Browser)

Le chiamate via webscript API dalla console di amministrazione (/alfresco/s/admin) possono generare l’errore CSRF quando per esempio, si tenta di utilizzare la finzionalità browser dei nodi.

SOLUZIONE 1 – Disabilitare il filtro CSRF su chiamate del tipo /alfresco/s/admin/admin-nodebrowser

Step 1. Creare (se non presente) il file: <ALFRESCO_HOME>/tomcat/shared/classes/alfresco/extension/web-scripts-config-custom.xml

Step 2. Disabilitare la dichiarazione del filtro CSRF

<!-- Disable CSRF filter. Config below overrides those include here:
alfresco/WEB-INF/classes/alfresco/web-client-security-config.xml

CSRF Filter disabled on URLs  /alfresco/s/*
-->
<alfresco-config>
 <config evaluator="string-compare" condition="CSRFPolicy" replace="true">
   <filter/>
 </config>
</alfresco-config>

2 Comments

  1. Roberto

    Ciao Giuseppe,
    innanzittutto complimenti per gli ottimi consigli/configurazioni su questo sito.
    Volevo chiederti un consiglio.
    Sto implementando una nuova istanza di alfresco 5.0.d su cloud (amazon).
    considerazioni:
    1) vorrei mettere un reverse proxy direttamente esposto su internet e la macchina alfresco non esposta per sicurezza, per questo basta apache reverse_proxy (yum install mod_ssl) , corretto?
    2) avrei bisogno di abilitare https su alfresco share, di default é abilitata, basta modificare alfresco global properties, però il mio dubbio riguarda il certificato da acquistare (per rimuovere quel fastidioso messaggio del browser che dice che il sito non é attendibile – comprando un ssl certificate ed installandolo su alfresco il problema si risolverebbe, ma non so come fare a fare ciò (installazione intendo); come installare su alfresco un certificato pubblico acquistato regolermente???
    3) Posso fare il modo che all’avvio di alfresco sia caricata solamente l’istanza Share e non quella di Alfresco? (noi useremmo solo share)
    Grazie mille

    Reply
  2. Giuseppe Urso

    Ciao Roberto,

    cerco di darti qualche info utile.

    1) Per una configurazione minimale (solo HTTP) di Apache in modalità proxy/reverse non hai bisogno di mod_ssl che ti serve solo nel caso volessi abilitare connessioni sicure via TLS. Nel tuo caso potresti bloccare con iptables l’accesso pubblico HTTP sulla porta 8080 di Alfresco e aprire il traffico solo sulla 80. In questo modo ti basta configurare un proxy/reverse HTTP o AJP su Apache e gestire il tuo portale con un unico front-end web che inoltra le richieste direttamente verso Share. Ho scritto qualcosa in passato dai un’occhiata qui:

    http://www.giuseppeurso.eu/configurare-piu-siti-sullo-stesso-web-server-apache-direttiva-virtualhost/

    2) Per il discorso fatto in precedenza, se Apache e Alfresco sono in esecuzione sulla stessa macchina, non hai bisogno di TLS su Alfresco (che comunque è abilitato di default sulla porta 8443). Puoi sempre usare Apache come unico front-end in modalità proxy/reverse HTTP o AJP. Se invece hai bisogno anche di un front-end HTTPS, sarà sufficiente configurare solo Apache con il tuo certificato SSL trusted acquistato da un provider di servizi come GeoTrust o RapidSSLOnline. Dai un’occhiata a questa guida con RapidSSLOnline:

    http://www.giuseppeurso.eu/come-rinnovare-un-certificato-ssl-wildcard-con-rapidsslonline/

    3) Assolutamente NO, poichè il vero cuore pulsante di Alfresco è proprio Alfresco.
    Share è solo una webapp che serve a presentare il Content Repository e tutte le sue funzionalità di gestione documentale. Dai un’occhiata al wiki per un approfondimento sulla sua architettura:

    https://wiki.alfresco.com/wiki/Alfresco_Repository_Architecture

    Giuseppe

    Reply

Leave a Reply

Your email address will not be published.