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»
Que excelente está ese script! Gracias, llevaba meses buscando como accesar el admin sin tener que llamar a soporte. Te felicito por el blog.
Me alegra que te haya servido, saludos!
Hola Estimado,
sabes si todavia funciona? yo tengo un Arris TG1672 pero no me funciono la contrasena del dia,
saludos.
Hola Eric, ya no funciona, al parecér cable color actualizó los equipos.
Cualquier novedad, lo publicaré. Saludos.
yo no puedo acceder al router hitron
Al parecer cambiaron el seed y ahora ya no funciona esa vulnerabilidad. Sabes algo al respecto??
Genio y el nombre de usuario?