Hechos clave:
- Miembros de la comunidad cripto han señalado que el protocolo ha superado varias auditorías de seguridad, lo que suele considerarse un indicador de fiabilidad.
- Un análisis preliminar vincula la vulnerabilidad con un fallo detectado por primera vez en 2023.
- Los investigadores descubrieron que partes del código explotado contenía rastros generados por IA.
- Mientras que el error de 2023 era un fallo puntual, en esta ocasión la vulnerabilidad expuso posibles debilidades en la propia estructura
La semana empezó mal para el protocolo DeFi Balancer, con otro ataque que sacudió a uno de los proyectos DeFi más antiguos.
Las primeras estimaciones cifran las pérdidas entre 100 y 120 millones de dólares, convirtiéndolo en uno de los mayores hackeos del año.
La vulnerabilidad que sustenta este ataque se remonta a un fallo detectado por primera vez en 2023, que ahora resurge de forma más compleja.
Las auditorías no salvaron el protocolo DeFi de Balancer
Lo que sorprende del hecho es que se trata de un protocolo de finanzas descentralizadas con varios años activo. Muchos miembros de la comunidad han señalado que Balancer DeFi ha superado varias auditorías de seguridad, lo que suele considerarse un indicador de fiabilidad.
La vulnerabilidad parece haber afectado a los mismos pools estables componibles V2 que ya habían sufrido un ataque en agosto de 2023.
En aquel entonces, el proyecto también se enfrentó a un grave problema técnico, pero el equipo lo gestionó eficazmente. Los desarrolladores elogiaron la rapidez con la que el protocolo DeFi de Balancer reaccionó y su comunicación fluida con la comunidad.
La historia se repite en 2025
El 3 de noviembre de 2025, el protocolo DeFi Balancer volvió a ser noticia tras otro ataque. Los primeros informes indican que el incidente afectó nuevamente a los mismos pools de la vez anterior.
El investigador Adi sugirió que el atacante utilizó un contrato especialmente diseñado que, durante la inicialización del pool, logró manipular las llamadas internas dentro de Balancer Vault. La vulnerabilidad permitió al atacante eludir las protecciones y realizar intercambios no autorizados, vaciando varios pools interconectados.
No se trataba de un fallo de cálculo, sino de un problema arquitectónico. Mientras que el error de 2023 era un fallo puntual, en esta ocasión la vulnerabilidad expuso posibles debilidades en la propia estructura de Balancer V2 bajo ciertas condiciones.
Investigadores posteriores descubrieron que el contrato del atacante aún contenía instrucciones console.log, registros de depuración típicos que suelen eliminarse antes de la implementación.
Estos registros se encuentran a menudo en código generado por herramientas de IA como ChatGPT u otros modelos de lenguaje complejos.
Esto llevó a especular que el exploit podría haberse escrito, al menos parcialmente, con ayuda de IA.
Si se confirma esta versión, podría convertirse en uno de los primeros casos registrados de un ataque informático asistido por IA en el sector de las criptomonedas DeFi.
Este incidente demuestra que incluso los protocolos DeFi consolidados y con múltiples auditorías no son inmunes a fallos de diseño fundamentales.
El protocolo DeFi Balancer se convirtió en un recordatorio más de cómo la deuda técnica en los sistemas descentralizados puede acumularse silenciosamente y reaparecer años después de nuevas formas.
Leer más:
- ¿Cómo de grande es la caída de Bitcoin? Comparativa con desplomes históricos
- Mercados globales caen por miedo a una burbuja de IA: Burry revela una apuesta de 1.100 millones de dólares contra Nvidia y Palantir
- Solana pone a prueba los 150 $: mínimos de agosto pese a los flujos recientes en ETF
window.addEventListener(«DOMContentLoaded», () => { const header = document.querySelector(«.header_wrapper»); const pageLegend = document.querySelector(‘#multiCollapse1’); const pageLegendList = document.querySelector(‘#multiCollapse2’); const pageLegendCollapse = new bootstrap.Collapse(pageLegend, {toggle: document.querySelector(«.toc-sticky»).classList.contains(‘sticky’)}); /** * Changing current title */ (function (pageLegend) { const titleNodes = pageLegend.querySelectorAll(‘.StepProgress-item__link’); if (!titleNodes.length) return; const titles = […titleNodes].map((itm, i) => ({ id: itm.getAttribute(‘data-id’), text: itm.textContent, level: itm.getAttribute(‘data-level’), linkNode: itm, titleNode: document.getElementById(itm.getAttribute(‘data-id’)), index: i, })); /** * Source: https://www.sitepoint.com/throttle-scroll-events/ * @param {Function} fn * @param {number} wait * @returns {(function(): void)|*} */ const throttle = (fn, wait) => { let time = Date.now(); return function () { if ((time + wait – Date.now()) { const documentScrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; let current = 0; // Title titles.forEach((itm, i) => { //console.log(itm) const itmOffsetTop = itm.titleNode ? itm.titleNode.offsetTop – 100 : 0; if (documentScrollTop >= itmOffsetTop) { document.getElementById(‘toc-current-title’).innerHTML = itm.text; document.getElementById(‘toc-current-title’).setAttribute(‘data-current-id’, itm.id); document.getElementById(‘toc-current-title’).setAttribute(‘data-current-level’, itm.level); current = i; } }) // close all list and open sub list if needed if (document.querySelector(«.toc-sticky»).classList.contains(‘sticky’)) { document.querySelectorAll(‘.subList-in-progress’).forEach((el) => { el.children[1].classList.remove(‘show’); el.getElementsByClassName(‘icon-chevron-down’)[0].classList.remove(‘up’); }); const currentEl = titles[current]; currentEl.linkNode.classList.add(‘show’); } titles.forEach((itm, i) => { itm.linkNode.parentNode.parentNode.classList.remove(‘current’, ‘is-done’); if (current > i) { itm.linkNode.parentNode.parentNode.classList.add(‘is-done’) }; if (current === i) { itm.linkNode.parentNode.parentNode.classList.add(‘current’); }; }) } changeCurrentTitle(); document.addEventListener(‘scroll’, throttle(changeCurrentTitle, 50)); })(pageLegend); /** * Collapse */ (function (pageLegend, header) { const icon = pageLegend.parentNode.querySelector(«.collapse-action-btn i»); const collapseToggle = (status) => (e) => { if (!e.target.isEqualNode(pageLegend)) return; icon.classList.toggle(«up»); const containerHeight = pageLegend.getBoundingClientRect().height; const showSubtitleContent = () => { const currentId = document.getElementById(‘toc-current-title’).getAttribute(‘data-current-id’); const currentLevel = document.getElementById(‘toc-current-title’).getAttribute(‘data-current-level’); const currentSubTitle = currentLevel == 3 ? document.querySelector(`a[data-id=»${currentId}»]`).parentNode.parentNode.parentNode : false; if (!currentSubTitle) return; new bootstrap.Collapse(currentSubTitle, {toggle: false}).show(); } showSubtitleContent(); console.log(status + ‘fdsfsd’ + containerHeight); if (status === ‘shown’ && document.querySelector(«.toc-sticky»).classList.contains(‘sticky’)) { document.querySelector(‘html’).classList.remove(‘overflow-hidden’); pageLegend.classList.add(‘overflow-auto’); pageLegend.style.height = `calc(100vh – ${header.getBoundingClientRect().height + document.querySelector(‘.toc-sticky__open’).getBoundingClientRect().height + 16}px)`; } else if (status === ‘hide’) { document.querySelector(‘html’).removeClass(‘overflow-hidden’); pageLegend.classList.remove(‘overflow-auto’); pageLegend.style.height = ‘auto’; } } pageLegend.addEventListener(‘shown.bs.collapse’, collapseToggle(‘shown’)); pageLegend.addEventListener(‘hide.bs.collapse’, collapseToggle(‘hide’)); })(pageLegend, header); /** * Collapse sub-titles */ (function (pageLegend) { const collapseEls = pageLegend.querySelectorAll(‘.collapse’); collapseEls.forEach(function (el) { const toggleArrowDirection = function (e) { if (!e.target.isEqualNode(el)) return; const id = this.getAttribute(‘id’); document.querySelector(`.collapse-action-btn[data-bs-target=»#${id}»] .icon-chevron-down`).classList.toggle(‘up’); } el.addEventListener(‘shown.bs.collapse’, toggleArrowDirection); el.addEventListener(‘hide.bs.collapse’, toggleArrowDirection); }) })(pageLegend); /** * Collapse main title */ (function (pageLegendList) { const icon = pageLegendList.parentNode.querySelector(«.collapse-action-btn i»); const collapseToggle = () => (e) => { if (!e.target.isEqualNode(pageLegendList)) return; icon.classList.toggle(«up»); } pageLegendList.addEventListener(‘shown.bs.collapse’, collapseToggle()); pageLegendList.addEventListener(‘hide.bs.collapse’, collapseToggle()); })(pageLegendList); (function (pageLegendList) { const collapseEls = pageLegendList.querySelectorAll(‘.collapse’); collapseEls.forEach(function (el) { const toggleArrowDirection = function (e) { if (!e.target.isEqualNode(el)) return; const id = this.getAttribute(‘id’); document.querySelector(`.toc-sticky-list .collapse-action-btn[data-bs-target=»#${id}»] .icon-chevron-down`).classList.toggle(‘up’); } el.addEventListener(‘shown.bs.collapse’, toggleArrowDirection); el.addEventListener(‘hide.bs.collapse’, toggleArrowDirection); }) })(pageLegendList); /** * Sticky functionality * Source: https://stackoverflow.com/questions/17893771/javascript-sticky-div-after-scroll */ (function (header, pageLegendCollapse) { // set everything outside the onscroll event (less work per scroll) const target = document.querySelector(«.toc-sticky»); const targetListStatic = document.querySelector(«.toc-sticky-list»); if (!target || !header) return; const headerHeight = header.getBoundingClientRect().height; const targetHeight = targetListStatic.getBoundingClientRect().height; // -headerHeight so it won’t be jumpy const stop = targetListStatic.offsetTop + headerHeight + targetHeight; const docBody = document.documentElement || document.body.parentNode || document.body; const hasOffset = window.pageYOffset !== undefined; const applySticky = function () { // cross-browser compatible scrollTop. const scrollTop = hasOffset ? window.pageYOffset : docBody.scrollTop; // if user scrolls to headerHeight from the top of the target div if (scrollTop >= stop) { pageLegendCollapse.hide(); // stick the div target.classList.add(«sticky»); //target.style.marginTop = `${headerHeight}px`; } else { pageLegendCollapse.show(); // release the div target.classList.remove(«sticky»); target.style.marginTop = «»; } } applySticky(); window.addEventListener(‘scroll’, applySticky); })(header, pageLegendCollapse); jQuery(‘span.show_moretoc’).click(function () { jQuery(‘span.show_moretoc’).hide(); jQuery(‘.ms_hidetoc’).show(); }); });
The post 100 millones de dólares perdidos para el protocolo DeFi Balancer appeared first on Cryptonews en Español.
📲 𝗦í𝗴𝘂𝗲𝗻𝗼𝘀
@cryptocastellano
@cryptocastellano
Guarda y comparte nuestras publicaciones diarias si te aportan valor y aprendizaje.
Aviso: Todo el contenido emitido en este sitio web tiene fines estrictamente educativos. Las operaciones se hacen utilizando márgenes, lo cual trae consigo un alto nivel de riesgo, el cual no es apto para algunos inversionistas. Antes de involucrarse en el mercado debe evaluar cuidadosamente los objetivos de su inversión, su nivel de experiencia, y su disposición a tomar riesgos.