Es altamente conveniente tener unas mínimas medidas de seguridad para dificultar el acceso a la jmx-console y la web-console de Jboss, especialmente si tienes una versión antigua de Jboss(por debajo de la 6  y especialmente la rama 4.x), ya que se pueden realizar numerosas operaciones y obtener datos desde las mismas.

Además hace unos días que circula un gusano que aprovecha una vulnerabilidad(CVE-2010-0738) de hace un año aproximadamente y se aprovecha de la costumbre de proteger mediante security constraints las peticiones POST y GET pero no el resto de peticiones http. Para más detalles ver este comunicado.

El primer paso es activar la autenticación mediante usuario y password.

1. Editar el fichero $JBOSS_HOME/PROFILE/deploy/jmx-console.war/WEB-INF /web.xml

Y descomentar el siguiente bloque:

 <security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>

     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>

   <login-config>
      <auth-method>BASIC</auth-method>
      <realm-name>jmx-console</realm-name>
   </login-config>

   <security-role>
      <role-name>JBossAdmin</role-name>
   </security-role>

El valor indicado en el parámetro <real-name> del apartado <login-config> debe coincidir con el indicado em el fichero  $JBOSS_HOME/server/PROFILE/conf/login-config.xml el cual define  la autenticación y autorización a realizar .El usuario y password se indica en un fichero de texto plano (especial cuidado con los permisos de acceso) $JBOSS_HOME/server/PROFILE/conf/props/jmx-console-users.properties. El usuario que especifiquemos debe tener rol JBossAdmin tal y como especificamos en el fichero web.xml .

2. Editar el fichero $JBOSS_HOME/PROFILE/deploy/jmx-console.war/WEB-INF/jboss-web.xml, para fijar el nombre del dominio de seguridad que usaremos más adelante:

  <security-domain>java:/jaas/web-console</security-domain>

3. Editar el fichero $JBOSS_HOME/server/default/conf/login-config.xml:

y asegurarnos de que tenemos este bloque de código

    <application-policy name = "jmx-console">
       <authentication>
          <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
             flag = "required">
           <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
           <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
          </login-module>
       </authentication>
    </application-policy>

    <!-- A template configuration for the web-console web application. This
      defaults to the UsersRolesLoginModule the same as other and should be
      changed to a stronger authentication mechanism as required.
    -->
    <application-policy name = "web-console">
       <authentication>
          <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
             flag = "required">
             <module-option name="usersProperties">web-console-users.properties</module-option>
             <module-option name="rolesProperties">web-console-roles.properties</module-option>
          </login-module>
       </authentication>
    </application-policy>

En las versiones anteriores o iguales a  JBoss AS 5.x, el fichero web.xml incluye una security-constraint  que bloquea las peticiones GET y POST :

    <http-method>GET</http-method>
    <http-method>POST</http-method>

Eliminar estas opciones para que la restricción de seguridad afecte a todos los tipos de peticiones http

La aplicación puede ser deplegada mediante touch jmx-console.war en caliente, sin reiniciar el servidor.

El proceso  para securizar la web-console  es parecido:

  • Editamos $JBOSS_HOME/PROFILE/deploy/management/console-mgr.sar/web-console.war/WEB-INF/web.xml y $JBOSS_HOME/server/PROFILE/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml de la misma manera que con la jmx-console
  • Editamos $JBOSS_HOME/server/PROFILE/conf/props/jmx-console-users.properties  de la misma manera que con la jmx-console
Debemos comprobar que ambas aplicaciones se han redesplegado bien y que se pide la autenticación.
Anuncios