Security-hardening properties
IBM® Business Automation Workflow provides configuration settings at the deployment environment level to harden security that mitigates web application threats, including cross-site request forgery (CSRF), network sniffing, clickjacking, and uploading malicious documents.
Hardening IBM Business Automation Workflow
ProcessServer.property
to
Security.property
. When you upgrade to V8.6 2018.03, these
properties are automatically migrated to their new names. If you have automated scripts to set or
read these properties using AdminTask.getBPMProperty(...)
or
AdminTask.setBPMProperty(...)
, the AdminTask will accept either name. However,
names with ProcessServer.property
for these security-hardening
settings are deprecated.Property | Accepted values | Example | Default value |
---|---|---|---|
Security.CommonLogoutExitPage | A full URL (absolute or relative) to which the user should be redirected after
logout. This allows logging out of SSO solutions as part of logging out of Workflow. This property
has no default value. Note that this setting overrides individual logout pages configured for
individual web applications as described in Configuring third-party authentication products. If any
of the URLs of the custom logout pages are not on the same host as the Business Automation Workflow server or do not belong to the same domain, you must
set one of the |
|
|
Security.CheckXSRFForOldRestApi | This property controls whether IBM Business Automation Workflow validates the cookie "XSRF-TOKEN" against incoming REST API requests (POST/PUT/DELETE) with the path pattern "/rest/bpm/wle/v1/*". The value must be TRUE or FALSE. |
|
TRUE |
Security.UserAgentKeywordWhiteListForOldRestAPICSRFCheck | The value of this property must be a comma-separated list of keywords of the user agents that IBM Business Automation Workflow must not validates the cookie "XSRF-TOKEN" against incoming REST API requests with the path pattern "/rest/bpm/wle/v1/*". |
|
Java,Wink Client,HttpClient,curl,Jersey,HttpUrlConnection |
Security.CsrfProtectionRefererWhitelist | The value of this property must be a comma-separated list of fully qualified host names that are valid values for the Referer header field. By restricting values to host names that serve user interfaces for Business Automation Workflow, you can mitigate CSRF. For more information about the Referer header field, see the Request for Comments (RFC) 7231 documentation. | |
Unassigned, which allows the header of the HTTP request to contain any value |
Security.CsrfProtectionOriginWhitelist | The value of this property must be a comma-separated
list of prefixes in the format protocol://host:port that
are acceptable values in the Origin header field. By restricting possible
values to host names and domain names that serve user interfaces for Business Automation Workflow, you
can mitigate CSRF. For more information about the Origin header, see
the RFC
6454 documentation. |
|
Unassigned, which allows the header of the HTTP request to contain any value |
Security.XFrameOptionsHeaderValue (deprecated) | Note: The Security.XFrameOptionsHeaderValue property
is deprecated. Use the Security.ContentSecurityPolicyHeaderValue property
instead. The Content-Security-Policy HTTP header has a frame-ancestors directive which obsoletes this header for supporting browsers.
|
|
Unassigned, which omits the X-Frame-Options field in the response header |
Security.ContentSecurityPolicyHeaderValue | You set the value of the Content-Security-Policy
and X-Content-Security-Policy HTTP response header fields with this
property. Business Automation Workflow returns
this value to client requests. The value instructs the browser to
load and run assets in the context of Business Automation Workflow user
interfaces only from a set of allowed origins. For example, the policy default-src
'unsafe-inline' 'unsafe-eval' https://bpm1.ibm.com https://bpm1; img-src
data: https://bpm1.ibm.com https://bpm1 instructs the browser
to retrieve images from data: URIs and from URIs that meet one of
the two allowed URI patterns. |
|
default-src 'self' 'unsafe-inline' 'unsafe-eval';frame-ancestors 'self'; img-src 'self' data: |
Security.StrictTransportSecurityHeaderValue | You set the value of the Strict-Transport-Security
HTTP response header field with this property. Business Automation Workflow returns
this value to client requests. The value instructs the browser to
upgrade any http:// link to the server to an https:// link. For more
information about the Strict-Transport-Security header, see the RFC 6797 RFC
documentation. A sample value is max-age=100; includeSubDomains . |
|
max-age=31536000; includeSubDomains |
Security.XXssProtectionHeaderValue | You set the value of the X-XSS-Protection HTTP
response header field with this property. Business Automation Workflow returns
this value to client requests. The value instructs the browser to
enable its built-in cross-site scripting protection, independent of
the user's configuration. Setting this property can be useful if the
Internet Explorer browser categorizes Business Automation Workflow to run
in the intranet zone, which applies weaker browser security settings.
A sample value is 1; mode=block . |
|
1; mode=block |
Security.XContentTypeOptionsHeaderValue | You set the value of the X-Content-Type-Options
HTTP response header field with this property. Business Automation Workflow returns
this value to client requests. For example, a value of nosniff instructs
browsers to disable MIME-type sniffing (a technique that tries to
determine a suitable rendering strategy for server content based on
the contents of the HTTP response). MIME-type sniffing can interfere
with the explicit overwriting of MIME types in Business Automation Workflow document
downloads and, thus, re-run JavaScript even if Business Automation Workflow explicitly
set the Content-Type header to force the download window. |
|
nosniff |
Security.CsrfSessionTokenSalt Security.CsrfSessionTokenProtectedUris | You enable session-specific tokens to mitigate CSRF with these properties. Do
not set the HTTPOnly flag because the CSRF token is a double-submit token.
|
|
The default for Security.CsrfSessionTokenSalt is
a system generated random value, which is set in the configuration
to ensure the same value is shared by all cluster members. The default value for Security.CsrfSessionTokenProtectedUris is /teamworks/ajaxCoach,/teamworks/cs_ |
Security.AllowedHttpMethods | In Business Automation Workflow, web
applications process requests for a small set of well-known HTTP methods.
For a minimal attack surface, it is a good security practice to respond
with an HTTP 403 (forbidden) status code
if a request uses an unexpected HTTP method. This avoids unintentionally
triggered default code paths that are implemented in various web application
frameworks. The value of this property is a comma-separated list of acceptable HTTP methods, such as the following methods that are set by default:
Any requests with a method that isn't on the allowlist will be rejected with the message HTTP 403 (forbidden). Although the methods that are set by default are all used by the REST API, you can apply restrictions to the methods by using the WSADMIN setBPMProperty command to configure the property. For more information, see the topic setBPMProperty command. Any customization of Heritage Process Portal (deprecated) themes (and Business Space) requires a WebDAV connection. WebDAV uses exotic HTTP methods that are defined in their documentation about HTTP extensions for distributed authoring. Information on using WebDAV for customization is found in the topic Connecting to the WebDav folder to customize Heritage Process Portal. Heritage Process Portal theme customizations are not relevant to all customers. The few customers who need this capability generally only require it temporarily. WebDAV HTTP methods are therefore not on the allowlist by default. We recommend the temporary enablement of WebDAV HTTP methods while customizing Heritage Process Portal or Business Space themes (if needed). |
|
GET,PUT,POST,DELETE,HEAD,OPTIONS |
unset
for the following properties: Security.AllowedHttpMethods
Security.ContentSecurityPolicyHeaderValue
Security.CsrfSessionTokenProtectedUris
Security.StrictTransportSecurityHeaderValue
Security.XContentTypeOptionsHeaderValue-
Security.XXssProtectionHeaderValue
If your custom user
interface application requires browsers to allow additional origins
or features, configure the exact header values that you need IBM Business
Automation Workflow to
return. For example, you might need to extend the Security.ContentSecurityPolicyHeaderValue
with
additional origins to load images, style sheets or even script from
other sources.
This is the case when configuring this IBM Business Automation Workflow as one of the federated IBM Business Automation Workflow systems for Process Federation Server and federated portal or when integrating with BA Studio of IBM Cloud Pak for Business Automation.
fp1.ibm.com
is your federated portal, and bpm1.ibm.com
is
the IBM Business
Automation Workflow system
to be federated:- All of the federated BAW/BPM systems (bpm1.ibm.com) need to configure
Security.ContentSecurityPolicyHeaderValue
to a value similar to the following:default-src 'self' 'unsafe-inline' 'unsafe-eval';frame-ancestors 'self' https://fp1.fyre.ibm.com; img-src 'self' data:
- If non-default HTTP(s) port are used, for example, 9443, then
the configuration needs to be the following:
default-src 'self' 'unsafe-inline' 'unsafe-eval';frame-ancestors 'self' https://fp1.fyre.ibm.com:9443; img-src 'self' data:
de = 'De1'
def printSetting(propertyName):
value = AdminTask.getBPMProperty(['-de', de, '-name', propertyName])
if value:
print propertyName+': ' + value
elif propertyName == 'Security.XFrameOptionsHeaderValue':
print propertyName + ' is not set, it is obsolete, use CSP frame-ancestors instead.'
else:
print propertyName + ' is not set.'
print 'Security hardening settings:'
printSetting('Security.CsrfProtectionRefererWhitelist')
printSetting('Security.CsrfProtectionOriginWhitelist')
printSetting('Security.XFrameOptionsHeaderValue')
printSetting('Security.ContentSecurityPolicyHeaderValue')
printSetting('Security.StrictTransportSecurityHeaderValue')
printSetting('Security.XXssProtectionHeaderValue')
printSetting('Security.XContentTypeOptionsHeaderValue')
printSetting('Security.CsrfSessionTokenSalt')
printSetting('Security.CsrfSessionTokenProtectedUris')
printSetting('Security.AllowedHttpMethods')
Store the script in a path accessible from your wsadmin scripting client; for example, path_to_script/printSecuritySettings.jy.
wsadmin -conntype none -lang jython -f path_to_script/printSecuritySettings.jy
WASX7357I: By request, this scripting client is not connected to any server process. oCertain configuration and application operations will be available in local mode.
Security hardening settings:
Security.CsrfProtectionRefererWhitelist is not set.
Security.CsrfProtectionOriginWhitelist is not set.
Security.XFrameOptionsHeaderValue is not set, it is obsolete, use CSP frame-ancestors instead.
Security.ContentSecurityPolicyHeaderValue is not set.
Security.StrictTransportSecurityHeaderValue is not set.
Security.XXssProtectionHeaderValue is not set.
Security.XContentTypeOptionsHeaderValue is not set.
Security.CsrfSessionTokenSalt is not set.
Security.CsrfSessionTokenProtectedUris is not set.
Security.AllowedHttpMethods: GET,PUT,POST,DELETE,HEAD,OPTIONS
Hardening WebSphere Application Server
- By default, TLS secured communication is very compatible, which allows older clients to connect
(and be connected to) by using TLS 1.0 and TLS 1.1. To restrict the set of TLS protocol versions and
available ciphers, you can update the default SSL configuration by using a script
like:
AdminTask.modifySSLConfig('[-alias NodeDefaultSSLSettings -sslProtocol TLSv1.2 -securityLevel CUSTOM -enabledCiphers "SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256" ]') AdminTask.modifySSLConfig('[-alias CellDefaultSSLSettings -sslProtocol TLSv1.2 -securityLevel CUSTOM -enabledCiphers "SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256" ]')
- By default, WebSphere Application
Server listens to several
secure and non-secured ports for HTTP traffic, ignoring the exact hostname used by clients to
connect. This can cause concerns about possible host header injection because requests will be
processed regardless of the host header value. You can ensure that IBM Business
Automation Workflow applications only respond to requests with a
particular host port combination, by configuring the
default_host
virtual host "host aliases" in the application server using a script like the following. Replace the two initial variables to match your environment. If you use a web server in front of your environment, use the web server's hostname and port:targethostname='example.fyre.ibm.com' targetport='9443' cellName=AdminControl.getCell() aliases=AdminUtilities.convertToList(AdminConfig.list('HostAlias', AdminConfig.getid( '/Cell:' + cellName + '/VirtualHost:default_host/'))) for alias in aliases: port = AdminConfig.showAttribute(alias, 'port') if (port != targetport): print 'removing hostalias with port number ' + port AdminConfig.remove(alias) else: hostname = AdminConfig.showAttribute(alias, 'hostname') if ('*' == hostname): print 'modifying hostname from * to ' + targethostname + ' for hostalias with port ' + port AdminConfig.modify(alias, '[[hostname ' + targethostname + ']]') else: print 'there is already a non-wildcard hostname configured: ' + hostname
Important: The blank lines at the end of this sample are syntactically important.