AnsweredAssumed Answered

Alert di sicurezza per Alfresco 4

Question asked by openpj Moderator on Apr 28, 2012
Vi informiamo che è stata rilasciata la versione Enterprise di Alfresco 4.0.1, quest'ultima versione include due importanti patch di sicurezza per il prodotto:
  • SOLR REST API permette un accesso ai contenuti ad utenti non autenticati (ALF-13721)

  • Esecuzione remota di script attraverso l'XSLT Processor via Web Script (ALF-13726)
Se siete utenti della versione Enterprise di Alfresco, dovreste già aver ricevuto l'alert per questi problemi e riguardo anche a cosa fare per risolverli. Entrambe le issue sono risolte nella versione 4.0.1. Quindi non dovete fare altro che effetuare l'upgrade a quest'ultima versione.

Per tutti gli utenti della versione Community, nella prossima versione che verrà rilasciata, saranno presenti le due patch.
Fino a quel momento, in questo post trovate le informazioni riguardo al workaround che vi permette di fixare la vostra istanza.

SOLR REST API permette accesso ad utenti non autenticati ai contenuti del repository

E' stata scoperto un problema riguardo l'API REST del repository afferente ai path /alfresco/s/api/solr, /alfresco/wcservice/api/solr e /alfresco/wcs/api/solr che non erano protetti dal certificato SSL di SOLR e potrebbero potenzialmente essere utilizzati da un utente non autenticato per reperire informazioni dal repository. Il problema è presente anche se non è stato configurato e installato SOLR per le ricerche.

La issue può essere facilmente risolta aggiungendo codice XML all'interno del file web.xml. Se date un'occhiata al web.xml, vedrete un elemento security-constraint che include il pattern "/service/api/solr".

Il problema è che il Web Script è accessibile attraverso diversi altri pattern che non sono coperti da questo vincolo di sicurezza.
<security-constraint>
      <web-resource-collection>
         <web-resource-name>SOLR</web-resource-name>
         <url-pattern>/service/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
         <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
   </security-constraint>

Potete aggiungere quindi un ulteriore vincolo di sicurezza (security-constraint) in questo modo:
<security-constraint>
      <web-resource-collection>
         <web-resource-name>SOLR</web-resource-name>
         <url-pattern>/s/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
         <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
   </security-constraint>

   <security-constraint>
      <web-resource-collection>
         <web-resource-name>SOLR</web-resource-name>
         <url-pattern>/wcservice/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
         <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
   </security-constraint>

   <security-constraint>
      <web-resource-collection>
         <web-resource-name>SOLR</web-resource-name>
         <url-pattern>/wcs/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
         <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
   </security-constraint>

Possibile esecuzione di codice da remoto attraverso l'XSLT Processor via Web Script

Il processore XSLT di Alfresco permetteva l'utilizzo di template XSLT utilizzati dai Web Scripts e dalle Web Forms facendo in modo che qualcuno potesse utilizzare le estensioni di Apache Xalan per invocare arbitrariamente metodi Java.

Questo exploit, se utilizzato, permetteva di sfruttare un buco di sicurezza facendo in modo che qualsiasi utente con permessi potesse eseguire un upload di un Web Scripts o di un template XSLT.
La patch adesso previene l'utilizzo di qualsiasi namespace che estende direttamente il namespace 'alf' preconfigurato di default in Alfresco.

Con questa patch attiva, le estensioni Xalan non possono invocare arbitrariamente i metodi Java perché solamente quelli presenti nelle estensioni di Alfresco saranno invocabili.
Se avete bisogno di invocare il vostro codice Java attraverso un'estensione Xalan, potete ancora farlo configurando esplicitamente il processore XSLT.

Il codice di questa seconda issue è presente all'interno della issue JIRA. Questo dovrebbe permettervi di applicare la patch al JAR, questo solo se non potete aspettare per il rilascio della prossima versione Community.

Sempre per la versione Community una possibile risoluzione potrebbe essere quella di disabilitare il processore XSLT.
Nella versione 4.0d create il file security-fixes-context.xml all'interno del path /shared/classes/alfresco/extension avente come contenuto:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!– override xslt beans to disable xslt processing –>
<!– viewtopic.php?f=2&t=44384 –>
<!– https://issues.alfresco.com/jira/browse/ALF-13726 –>
<bean id="xsltRenderingEngine" class="java.lang.String"/>
<bean id="xsltFunctions" class="java.lang.String"/>
<bean id="xsltProcessor" class="java.lang.String"/>
</beans>

Outcomes