File size: 1,542 Bytes
617110b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
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.")