Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + tecnología especializada

Manejar Errores en Operaciones de Texto

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al manejar adecuadamente los errores en las operaciones de texto. Las operaciones de texto en cobol pueden arrojar excepciones que filtren información sensible.

Necesidad

Manejar errores en operaciones sobre cadenas de texto en COBOL.

Contexto

A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en COBOL.

  2. La aplicación realiza operaciones sobre cadenas con las instrucciones STRING o UNSTRING.

  3. El código sólo debe realizar las funciones para las cuales fue diseñado y no acciones colaterales[1].

  4. El sistema debe evitar difundir información sensible al momento de ocurrir un evento excepcional[2].

Solución

  1. Una característica del lenguaje es que limita el tamaño de los valores, al tamaño definido en la división DATA DIVISION. Esto podría generar agujeros de seguridad al no tener en cuenta valores por fuera del límite de longitud.

  2. En el manejo de cadenas de texto es común encontrar operaciones de concatenación, en COBOL se logra a través del uso de STRING y se evitan los desbordamientos de longitud a través del uso de la cláusula ON OVERFLOW. Además, esta situación puede ser también encontrada en el uso de UNSTRING.

  3. Para la instrucción STRING, el código contenido en ON OVERFLOW es llamado cuando el valor del puntero es:

    • Menor a 1.

    • Mayor a la longitud del campo de recepción.

  4. Para la instrucción UNSTRING, el código contenido en ON OVERFLOW es llamado cuando:

    • El valor del puntero es menor a 1.

    • El valor del puntero es mayor que la longitud del campo de envío.

    • Se ha actuado sobre todos los campos de acogida y existen caracteres sin examinar en el campo de envío.

  5. Lo anterior se ilustra mediante un ejemplo. En primer lugar se define la división IDENTIFICATION DIVISION[3],[4]:

    cobolof.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLOF.
    
  6. En la división DATA DIVISION[5] se declaran tres variables:

    • W01-FIRSTNAME: El primer nombre de longitud máxima 10.

    • W02-LASTNAME: El apellido de longitud máxima 10.

    • W03-FULLNAME: El nombre completo compuesto por primer nombre y apellido de longitud máxima 10. Desde este punto se puede notar que hay un error de diseño, la longitud máxima para el nombre completo debería ser la suma de las dos anteriores variables (Longitud máxima de 20).

    1
    2
    3
    4
    5
    6
    7
    8
          ********
          * Data *
          ********
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01 W01-FIRSTNAME PIC X(10) VALUE "Fluid-Attacks".
           01 W02-LASTNAME  PIC X(10) VALUE "Group".
           01 W03-FULLNAME  PIC X(10).
    
  7. Se concatena las variables de nombre (W01-FIRSTNAME) y apellido (W02-LASTNAME):

    1
    2
    3
    4
    5
    6
    7
    8
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
               STRING W01-FIRSTNAME SPACE W02-LASTNAME
               DELIMITED BY SPACE
               INTO W03-FULLNAME
    
  8. En el caso de presentarse un desbordamiento en la cadena, el flujo de ejecución se transfiere a STRING-OVERFLOW:

    1
    2
           ON OVERFLOW
               PERFORM STRING-OVERFLOW.
    
  9. Si no ocurre un error, se despliega en pantalla el nombre completo contenido en la variable W03-FULLNAME:

    1
    2
           DISPLAY "Nombre completo: ", W03-FULLNAME.
           STOP RUN.
    
  10. En esta sección es posible tratar el desbordamiento como un error, para el presente ejemplo se despliega en pantalla una advertencia:

    1
    2
    3
           STRING-OVERFLOW.
               DISPLAY "String overflow".
               STOP RUN.
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

  1. cobolof.cbl contiene el código explicado anteriormente sin desbordamiento.




Haz un comentario

Estado de los servicios - Términos de Uso