Es un servicio de creación de PDF vulnerable para la inyección de código malicioso

4

Tenemos un informe en nuestra aplicación web que se muestra en formato tabular en HTML. Este informe tiene la disposición para ser descargado como PDF haciendo clic en el botón download as PDF . La pregunta es sobre la forma en que se implementa esta disposición de descarga de PDF. Me piden que escriba un servicio de back-end que convertiría la cadena HTML en bruto a PDF descargable. Para convertir el HTML en PDF, estamos utilizando la biblioteca The Flying Saucer para Java. Ahora, la forma en que se supone que debe funcionar es que obtendré contenido HTML en bruto como una cadena como:

<table id="new-table">
    <thead>
        <tr>
            <th class="model">Column 1</th>
            <th class="description">Column 2</th>
            <th class="quantity">Column-3</th>
            <th class="listDollars">Column-4</th>
            <th class="payout">Column-5</th>
    </thead>
    <tbody>
        <tr id="row-H2285" style="background: #FFFFFF;" class="modelRow">
            <td class="model">H2285</td>
            <td class="description">F125</td>
            <td>16</td>
            <td class="list"></td>
            <td class="Percent">... and so on


Desde la parte frontal de los parámetros de solicitud, tengo que convertir esta cadena HTML utilizando el platillo volante y devolver un archivo PDF. Mi pregunta es: ¿hay alguna manera de que un atacante pueda inyectar código malicioso dentro de este contenido HTML y enviarlo al servicio de back-end? ¿Qué podría ser perjudicial para cualquiera que abra el archivo PDF?

He buscado en Google cualquier problema de seguridad en la biblioteca de platillos voladores, pero no pude encontrar nada. Pero encontré esta pregunta en este sitio en Cómo inyectar código malicioso en pdf o jpeg y hay otro Detección de JavaScript malicioso en PDF

    
pregunta Aditya Cherla 20.06.2017 - 12:37
fuente

3 respuestas

4

He trabajado con muchas bibliotecas de PDF (aunque no esta exactamente), principalmente en .NET y, si se hace correctamente, está bien. Si le preocupa que el HTML del lado del cliente se envíe de vuelta al servidor y haya sido manipulado, entonces una posible sugerencia es que presente una versión HTML separada en su backend específicamente para que la utilice la biblioteca de PDF. Por lo tanto, esto no se procesa al cliente y no está sujeto a la manipulación del cliente.

    
respondido por el ISMSDEV 20.06.2017 - 13:21
fuente
4
  1. Asegúrese de que sus servicios web no sean susceptibles a las inyecciones de XSS.

  2. Debe encontrar formas de evitar el abuso (ya que se convierten en servicios web), por ejemplo. use el control de clave API, para evitar que alguien cargue cualquier archivo HTML con javascript malicioso en su generador de pdf.

respondido por el mootmoot 20.06.2017 - 13:55
fuente
3

Sin revisar toda la fuente de la biblioteca en cuestión y en cualquier otro lugar, posiblemente se pueda usar el PDF y evaluar su contenido (subido a algún otro servicio que analice el contenido o realice OCR, etc.), realmente no hay manera de sabiendo.

La clave aquí es que debe limpiar sus entradas de usuario tan pronto como las reciba independientemente de si confía en esta biblioteca. Tu objetivo como desarrollador debe ser "si alguien en quien no confío me da una cadena potencialmente explosiva, incluso si puedo manejarlo de manera segura, tengo que desactivarlo antes de que alguien que no sepa lo haga detonarlo accidentalmente".

Que alguien pueda ser otra herramienta en su proceso de procesamiento de datos que con mucho gusto evaluará una cadena maliciosa o el lector de PDF del cliente. De cualquier manera, es un daywrecker.

¡Escapa de tus cadenas! Hay muchas maneras de desinfectar las opiniones de los usuarios. No soy un experto en Java, así que no los conozco a todos, pero si es tu trabajo habitual, ciertamente deberías hacerlo.

    
respondido por el Ivan 20.06.2017 - 16:59
fuente

Lea otras preguntas en las etiquetas