{"id":1547,"date":"2025-11-14T10:12:31","date_gmt":"2025-11-14T10:12:31","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=1547"},"modified":"2026-02-04T23:13:19","modified_gmt":"2026-02-04T23:13:19","slug":"quien-te-ha-visto-nadie-y-quien-te-ve-todo-el-mundo-filtraciones-de-codigo-de-la-app-store","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/11\/14\/quien-te-ha-visto-nadie-y-quien-te-ve-todo-el-mundo-filtraciones-de-codigo-de-la-app-store\/","title":{"rendered":"Qui\u00e9n te ha visto (nadie) y qui\u00e9n te ve (todo el mundo): filtraciones de c\u00f3digo de la App Store"},"content":{"rendered":"\n<p>Hace unos d\u00edas, un incidente en el gigante tecnol\u00f3gico Apple acapar\u00f3 la atenci\u00f3n de la comunidad de desarrolladores: el c\u00f3digo fuente de la nueva interfaz web del App Store fue presuntamente &#8220;filtrado&#8221; y publicado en GitHub. Aunque el incidente no implic\u00f3 un fallo de seguridad cr\u00edtico ni la exposici\u00f3n de datos de usuario, s\u00ed que revel\u00f3 detalles internos de la aplicaci\u00f3n. La causa, un simple, pero grave, descuido: dejar activados los archivos conocidos como <em>source maps<\/em> en producci\u00f3n.<\/p>\n\n\n\n<p>Para entender el asunto, primero debemos comprender qu\u00e9 es el c\u00f3digo minimizado o minificado. Las aplicaciones web se implementan&nbsp; en lenguajes modernos como TypeScript y mediante frameworks de desarrollo (como <em>Svelte<\/em>, en este caso). Una vez escrita, la aplicaci\u00f3n&nbsp;&nbsp;se compila y comprime: se eliminan espacios, se acorta nombres de variables y se simplifica la sintaxis, resultando en un archivo JavaScript mucho m\u00e1s peque\u00f1o y r\u00e1pido de cargar para el navegador. \u00bfEl resultado? Un c\u00f3digo pr\u00e1cticamente ilegible para un humano.<\/p>\n\n\n\n<p>El objetivo principal de la minimizaci\u00f3n es la optimizaci\u00f3n: lograr que la aplicaci\u00f3n se cargue en milisegundos. Sin embargo, un efecto secundario es la ofuscaci\u00f3n del c\u00f3digo. Aunque no se considera una medida de seguridad real (el c\u00f3digo que se ejecuta en el navegador siempre es, en esencia, p\u00fablico), s\u00ed funciona como una capa de protecci\u00f3n b\u00e1sica, obligando a cualquier curioso a invertir tiempo y esfuerzo para realizar ingenier\u00eda inversa del proyecto.<\/p>\n\n\n\n<p>Aqu\u00ed es donde entran en juego los cruciales <em>source maps<\/em> (mapas de c\u00f3digo fuente). Un <em>source map<\/em> es un archivo independiente que act\u00faa como traductor. Su funci\u00f3n es mapear el c\u00f3digo minificado, que est\u00e1 ejecutando el navegador, de vuelta a las l\u00edneas y archivos del c\u00f3digo original, tal como lo escribi\u00f3 el desarrollador. Esto es fundamental para la depuraci\u00f3n (<em>debugging<\/em>): si ocurre un error en la versi\u00f3n minificada, las herramientas de desarrollo pueden usar el <em>source map<\/em> para mostrar la ubicaci\u00f3n exacta del fallo en el c\u00f3digo fuente legible.<\/p>\n\n\n\n<p>El error de Apple fue precisamente incluir estos archivos de mapeo en el paquete de producci\u00f3n de la nueva versi\u00f3n web de la App Store. Al estar disponibles p\u00fablicamente en el servidor, un usuario con las herramientas adecuadas, o simplemente activando la consola de desarrollo del navegador, pudo descargar los <em>source maps<\/em> y, a trav\u00e9s de ellos, reconstruir la totalidad del c\u00f3digo fuente del <em>frontend<\/em> del sitio.<\/p>\n\n\n\n<p>El c\u00f3digo obtenido no conten\u00eda contrase\u00f1as, claves de API secretas ni informaci\u00f3n financiera de los clientes, ya que el <em>frontend<\/em> (la parte visible al usuario) no debe almacenar nunca datos sensibles. Sin embargo, la exposici\u00f3n fue considerable: revel\u00f3 la arquitectura completa de la aplicaci\u00f3n, la l\u00f3gica de sus componentes, la configuraci\u00f3n de enrutamiento y, lo m\u00e1s importante para los competidores o investigadores, los comentarios internos de los desarrolladores.<\/p>\n\n\n\n<p>Esta informaci\u00f3n, aunque no es un riesgo de seguridad inmediato para el usuario final, es jugoso para la competencia. Permite a otras empresas analizar las decisiones de dise\u00f1o de Apple, la estructura de su c\u00f3digo, y obtener una visi\u00f3n profunda de c\u00f3mo abordan la gesti\u00f3n de estado y la comunicaci\u00f3n con sus API internas. Es, en esencia, entregar los planos de construcci\u00f3n detallados de un edificio.<\/p>\n\n\n\n<p>Apple reaccion\u00f3 r\u00e1pidamente. En primer lugar, deshabilit\u00f3 los <em>source maps<\/em> del sitio web para detener la fuga de informaci\u00f3n adicional. En segundo lugar, interpuso una solicitud DMCA (Digital Millennium Copyright Act) ante GitHub para que se eliminaran de manera urgente tanto el repositorio original que conten\u00eda el c\u00f3digo como todas sus bifurcaciones (m\u00e1s de 8,000 copias), un claro indicio de que, aunque el c\u00f3digo fuera de la parte p\u00fablica, su distribuci\u00f3n era ilegal.<\/p>\n\n\n\n<p>El incidente del App Store sirve como unalecci\u00f3n para toda la industria tecnol\u00f3gica sobre la higiene en el proceso de despliegue. Demuestra que incluso los gigantes pueden cometer errores b\u00e1sicos de configuraci\u00f3n y subraya un principio fundamental de la ciberseguridad: la ofuscaci\u00f3n nunca debe ser el sustituto de la seguridad real. Todo lo que se env\u00eda al cliente debe considerarse p\u00fablico, y las listas de verificaci\u00f3n de producci\u00f3n deben ser inquebrantables, asegurando que herramientas de <em>debugging<\/em> como los <em>source maps<\/em> permanezcan confinadas al entorno de desarrollo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unos d\u00edas, un incidente en el gigante tecnol\u00f3gico Apple acapar\u00f3 la atenci\u00f3n de la comunidad de desarrolladores: el c\u00f3digo fuente de la nueva interfaz web del App Store fue presuntamente &#8220;filtrado&#8221; y publicado en GitHub. Aunque el incidente no implic\u00f3 un fallo de seguridad cr\u00edtico ni la exposici\u00f3n de datos de usuario, s\u00ed que [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1548,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[49,107],"tags":[],"class_list":["post-1547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-novedades","category-seguridad"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app.jpg","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app.jpg",1024,1024,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app-150x150.jpg",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app-300x300.jpg",300,300,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app-768x768.jpg",768,768,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app.jpg",1024,1024,false],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app.jpg",1024,1024,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/11\/surgeon_app.jpg",1024,1024,false]},"uagb_author_info":{"display_name":"Germ\u00e1n Telmo Eizaguirre Su\u00e1rez","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/geizaguirre\/"},"uagb_comment_info":4,"uagb_excerpt":"Hace unos d\u00edas, un incidente en el gigante tecnol\u00f3gico Apple acapar\u00f3 la atenci\u00f3n de la comunidad de desarrolladores: el c\u00f3digo fuente de la nueva interfaz web del App Store fue presuntamente &#8220;filtrado&#8221; y publicado en GitHub. Aunque el incidente no implic\u00f3 un fallo de seguridad cr\u00edtico ni la exposici\u00f3n de datos de usuario, s\u00ed que&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=1547"}],"version-history":[{"count":1,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1547\/revisions"}],"predecessor-version":[{"id":1549,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1547\/revisions\/1549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1548"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=1547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=1547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=1547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}