Sploitus

Exploit for CVE-2018-0114

kitploit Β· 2026-08-27

Exploit Code

MARKDOWN74 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-J4K0M-CVE-2018-0114
# CVE-2018-0114

Cisco의 node-jose(JWTλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ JavaScript 라이브러리)의 취약점 μ•…μš©.

이 Cisco node-jose 취약점을 톡해 κ³΅κ²©μžλŠ” μ•…μ˜μ μΈ 토큰을 μœ„μ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

JWTλŠ” μ‚¬μš©μžκ°€ 토큰 헀더에 곡개 ν‚€(jwk κ°’ μ‚¬μš©)λ₯Ό 포함할 수 μžˆλ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ΄λŸ¬ν•œ ν‚€λ₯Ό μ ˆλŒ€ μ‹ λ’°ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. κ³΅κ²©μžκ°€ μžμ‹ μ˜ ν‚€λ₯Ό μ œκ³΅ν•˜κ³  ν•΄λ‹Ή 개인 ν‚€λ‘œ λ©”μ‹œμ§€μ— μ„œλͺ…ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

# κ²€ν† 

이 λ¬Έμ œλŠ” 0.11 이전 버전에 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λœ λ³€κ²½ 사항(https://github.com/cisco/node-jose/commit/959a61d707ed2c8cf6582139a5605119283e4acb)을 μ‚΄νŽ΄λ³΄λ©΄, 특히 ν•œ 파일(`test/fixtures/jws.embedded_jwk.json`)이 ν₯λ―Έλ‘­μŠ΅λ‹ˆλ‹€:

root@kitploit:~
    
    
     "signing": {
        "protected": {
          "alg": "PS256",
          "jwk": {
            "kty": "RSA",
            "kid": "some-email@example.com",
            "use": "sig",
            "n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw",
            "e": "AQAB"
          }
        },
        "protected_b64u": "eyJhbGciOiJQUzI1NiIsImp3ayI6eyJrdHkiOiJSU0EiLCJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUiLCJ1c2UiOiJzaWciLCJuIjoibjRFUHRBT0NjOUFsa2VRSFB6SFN0Z0FiZ3M3YlRaTHdVQlpkUjhfS3VLUEVITGQ0ckhWVGVULU8tWFYyalJvamROaHhKV1REdk5kN25xUTBWRWlaUUh6X0FKbVNDcE1hSk1SQlNGS3JLYjJ3cVZ3R1VfTnNZT1lMLVF0aVdOMmxiemNFZTZYQzBkQXByNXlkUUxySHFrSEhpZzNSQm9yZGFaNkFqLW9CSHFGRUhZcFBlN1RwZS1PZlZmSGQxRTZjUzZNMUZaY0QxTk5MWUQ1bEZIcFBJOWJUd0psc2RlM3VoR3FDMFpDdUVIZzhsaHp3T0hydElRYlMwRlZiYjlrMy10VlRVNGZnXzNMX3ZuaVVGQUt3dUNMcUtuUzJCWXdkcV9telNuYkxZN2hfcWl4b1I3amlnM19fa1JodWF4d1VrUno1aWFpUWtxZ2M1Z0hkck5QNXp3IiwiZSI6IkFRQUIifX0",
        "sig-input": "eyJhbGciOiJQUzI1NiIsImp3ayI6eyJrdHkiOiJSU0EiLCJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUiLCJ1c2UiOiJzaWciLCJuIjoibjRFUHRBT0NjOUFsa2VRSFB6SFN0Z0FiZ3M3YlRaTHdVQlpkUjhfS3VLUEVITGQ0ckhWVGVULU8tWFYyalJvamROaHhKV1REdk5kN25xUTBWRWlaUUh6X0FKbVNDcE1hSk1SQlNGS3JLYjJ3cVZ3R1VfTnNZT1lMLVF0aVdOMmxiemNFZTZYQzBkQXByNXlkUUxySHFrSEhpZzNSQm9yZGFaNkFqLW9CSHFGRUhZcFBlN1RwZS1PZlZmSGQxRTZjUzZNMUZaY0QxTk5MWUQ1bEZIcFBJOWJUd0psc2RlM3VoR3FDMFpDdUVIZzhsaHp3T0hydElRYlMwRlZiYjlrMy10VlRVNGZnXzNMX3ZuaVVGQUt3dUNMcUtuUzJCWXdkcV9telNuYkxZN2hfcWl4b1I3amlnM19fa1JodWF4d1VrUno1aWFpUWtxZ2M1Z0hkck5QNXp3IiwiZSI6IkFRQUIifX0.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4",
        "sig": "XslzHQKM0UogsxugMxj0vmFhNijnmCksPyQ0x8SQ5xC9rEg4_3n_22bdJkM6CQWiTSDUuBCgXo3eqb6GhoPnYgnlGouDy0dIeaihl5Nr85uncW29I39OEZel8UtVGTfOxwssibymheBjKVp0_umkQANicz2_JTLGJQ42BgDVq6L2ZyrqIu7onr9B1XC-O9uzN2xoDfRwK7jCJjH1TPH09W9Pi1iLiXuf7liKH5dBDFzfjCqS4p3PQ6KtdT_gMTOg35PErxFfoi_53cr4l-rUv5ZkdcmIadGjMHDBVpfKSHhkZRVrvR0q6Go6TyvzL5l_hONYKKn09pkhFDjN9JvZeQ"
    

특히 `sig-input` 값이 μ€‘μš”ν•©λ‹ˆλ‹€. 이 값을 λ””μ½”λ”©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 데이터λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€:

root@kitploit:~
    
    
    {
      "alg":"PS256",
      "jwk":  {
              "kty":"RSA",
              "kid":"some-email@example.com",
              "use":"sig",
              "n":"n4EPtAOCc9Alke...........rNP5zw",
              "e":"AQAB"
              }
    }
    

이것이 μš°λ¦¬κ°€ νŽ˜μ΄λ‘œλ“œκ°€ μž‘λ™ν•˜λ„λ‘ μ˜¬λ°”λ₯Έ 헀더λ₯Ό μ–»κΈ° μœ„ν•΄ 따라야 ν•  ν˜•μ‹μž…λ‹ˆλ‹€.

# Exploitation

  * `openssl`을 μ‚¬μš©ν•˜μ—¬ 개인 RSA ν‚€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  * 방금 μƒμ„±ν•œ 개인 ν‚€μ˜ 곡개 ꡬ성 μš”μ†Œμ—μ„œ `n`κ³Ό `e`λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.
  * λ™μΌν•œ 개인 ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄λ‘œλ“œμ— μ„œλͺ…ν•©λ‹ˆλ‹€.
  * νŽ˜μ΄λ‘œλ“œμ—μ„œ `n`κ³Ό `e` 값을 λ³€κ²½ν•˜μ—¬ μ‚¬μš© 쀑인 개인 킀와 μΌμΉ˜ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  * 토큰 본문에 λŒ€ν•œ μ˜¬λ°”λ₯Έ νŽ˜μ΄λ‘œλ“œλ₯Ό 생성해야 ν•©λ‹ˆλ‹€.
  * μ•Œκ³ λ¦¬μ¦˜ `alg`κ°€ μ„œλͺ…에 μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μΈμ§€ 확인해야 ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„ `RS256`으둜 값을 λ³€κ²½ν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.



## μ˜ˆμ‹œ:

  * https://github.com/zi0Black/POC-CVE-2018-0114/blob/master/jwk-node-jose.py



# λ¦¬μ†ŒμŠ€:

  * https://nvd.nist.gov/vuln/detail/CVE-2018-0114
  * https://blog.pentesteracademy.com/hacking-jwt-tokens-jws-standard-for-jwt-666810809323