Skip to content

Commit

Permalink
WIP: fix IP disclosure when request doesnt have Host header
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosrfranco committed May 24, 2024
1 parent ed8163a commit 0c1528a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
2 changes: 2 additions & 0 deletions rundeckapp/grails-app/conf/spring/resources.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,8 @@ beans={
[it.key.toString(), it.value.toString()]
}
useForwardHeaders = useForwardHeadersConfig ?: Boolean.getBoolean('rundeck.jetty.connector.forwarded')
serverUrl = grailsApplication.config.getProperty('server.address', String.class)
serverPort = grailsApplication.config.getProperty('server.port', String.class)
}

def stsMaxAgeSeconds = grailsApplication.config.getProperty("rundeck.web.jetty.servlet.stsMaxAgeSeconds",Integer.class,-1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package rundeckapp.init.servlet
import org.eclipse.jetty.http.HttpMethod
import org.eclipse.jetty.http.HttpStatus
import org.eclipse.jetty.server.Connector
import org.eclipse.jetty.server.HostHeaderCustomizer
import org.eclipse.jetty.server.HttpConfiguration
import org.eclipse.jetty.server.HttpConnectionFactory
import org.eclipse.jetty.server.Request
Expand All @@ -24,6 +25,28 @@ class BanHttpMethodCustomizer implements JettyServerCustomizer {
}
}

class RundeckHostHeaderCustomizer implements JettyServerCustomizer {
String serverUrl
int serverPort

RundeckHostHeaderCustomizer(String serverUrl) {
this.serverUrl = serverUrl
}

RundeckHostHeaderCustomizer(String serverUrl, int serverPort) {
this.serverUrl = serverUrl
this.serverPort = serverPort
}

@Override
void customize(Server server) {
server.connectors.each {connector ->
HttpConfiguration config = connector.getConnectionFactory(HttpConnectionFactory.class).httpConfiguration
config.addCustomizer(new HostHeaderCustomizer(serverUrl, serverPort))
}
}
}

/**
* Includes and validates paths and http methods banned for security reasons
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package rundeckapp.init.servlet

import com.dtolabs.rundeck.core.init.CustomWebAppInitializer
import org.eclipse.jetty.server.Handler
import org.eclipse.jetty.server.HostHeaderCustomizer
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.server.handler.ContextHandler
import org.eclipse.jetty.webapp.AbstractConfiguration
Expand All @@ -36,6 +37,8 @@ class JettyServletContainerCustomizer implements WebServerFactoryCustomizer<Jett
*/
Map<String, String> initParams = [:]
Boolean useForwardHeaders
String serverUrl
String serverPort

@Override
void customize(final JettyServletWebServerFactory factory) {
Expand All @@ -50,6 +53,7 @@ class JettyServletContainerCustomizer implements WebServerFactoryCustomizer<Jett
}
})
factory.addServerCustomizers(new BanHttpMethodCustomizer())
factory.addServerCustomizers(new RundeckHostHeaderCustomizer(serverUrl, Integer.parseInt(serverPort ?: "4440")))
factory.addConfigurations(new JettyConfigPropsInitParameterConfiguration(initParams))
factory.useForwardHeaders=useForwardHeaders
}
Expand Down

0 comments on commit 0c1528a

Please sign in to comment.