第7章 既知の問題

以下の項ではバージョン 7.4 の既知の問題について説明します。

7.1. CVE セキュリティー脆弱性

Fuse はミドルウェア統合プラットフォームであるため、多くのサードパーティーコンポーネントと統合される可能性があります。そのため、サードパーティーの依存関係の一部にセキュリティーの脆弱性がある可能性を常に排除することは困難です。ここでは、Fuse 7.4 のサードパーティーの依存関係に影響する既知のセキュリティー脆弱性について説明します。

ENTESB-12489 CVE-2019-9827 - Fuse Console standalone on Amazon Web Services
セキュリティーの懸念があるため、スタンドアロンの Fuse アプリケーションを Amazon Web Services (AWS) にデプロイしないでください。この制限は、サポートされるすべてのスタンドアロン環境 (Spring Boot 1.x および 2.x、Karaf、および Red Hat JBoss Enterprise Application Platform) に適用されます。AWS に Fuse Console スタンドアロンをデプロイする場合は、Fuse 7.7 以降にアップグレードし、hawtio.disableProxy システムプロパティーを true に設定して Fuse Console のプロキシーサーブレットを無効にすることが強く推奨されます。
CVE-2017-12629 Solr/Lucene -security bypass to access sensitive data - CVE-2017-12629

Apache Solr は、Apache Lucene 検索エンジンを使用する一般的なオープンソースの検索プラットフォームです。アプリケーションが Apache Solar と Apache Lucene の組み合わせ (Camel Solr コンポーネントを使用している場合など) を使用する場合、このセキュリティー脆弱性の影響を受ける可能性があります。この脆弱性の詳細と軽減策について、リンク先のセキュリティーアドバイザリーを確認してください。

注記

Fuse ランタイムは Apache Solr や Apache Lucene を直接使用 しません。統合アプリケーションで Apache Solr と Apache Lucene を一緒に使用する場合のみセキュリティー上のリスクが発生します (Camel Solr コンポーネントを使用する場合など)。

複数の CVE jackson-databind セキュリティー脆弱性に関連する複数の CVE

FasterXML jackson-databind ライブラリーを使用し、JSON コンテンツをデシリアライズして Java オブジェクトをインスタンス化するアプリケーションは、潜在的に リモートコード実行 攻撃に脆弱です。しかし、脆弱性は自動的に発生せず、適切な軽減策を講じれば回避することができます。

最低でも以下の前提条件をすべて満たさなければ攻撃を実行することはできません。

  1. jackson-databind の JSON コンテンツのデシリアライズに対し、ポリモーフィックな型の処理を有効にする必要があります。Jackson JSON でポリモーフィックな型の処理を有効にする方法は 2 つあります。

    1. @JsonTypeInfo および @JsonSubTypes アノテーションの組み合わせを使用します。
    2. ObjectMapper.enableDefaultTyping() メソッドを呼び出します。この方法はポリモーフィックな型をグローバルで有効にするため、危険です。
  2. 現在のバージョンの jackson-databind によってブラックリストに指定されていない ガジェットクラス が 1 つ以上 Java クラスパスにあります。ガジェットクラスは、機密性の高い (潜在的に悪用可能な) 操作を、constructor または setter メソッド (デシリアライズ中に呼び出しできるメソッド) の実行による副次的な影響として定義します。Jackson JSON ライブラリーによって維持されるガジェットブラックリストは、リモートコード実行の脆弱性から守るための最後の手段になります。

    jackson-databind の脆弱性に関して多くの CVE が存在するのは、多数のガジェットクラスが存在するためです。ガジェットクラスの種類別に異なる CVE が存在します。

    重要

    Fuse は、できるだけ早期に jackson-databind の最新バージョンを使用するようアップグレードされます。しかし、現在 Fuse 7.4.0 は最新バージョンの jackson-databind と連携していません。

アプリケーションで jackson-databind ライブラリーを使用する必要がある場合、Jackson JSON でポリモーフィックな型の処理を行わないようにし、ObjectMapper.enableDefaultTyping() メソッドを絶対に呼び出さないことが、リスクを軽減する最も重要な対策になります。

7.2. Fuse Online

Fuse Online ディストリビューションの既知の問題は次のとおりです。

6052 [1.7.8] No activities after small load (~80000 messages in 20hours)

パフォーマンステストの結果、アクティビティー追跡ロジックによって、アクティビティーを追跡するために Fuse Online によって使用されるデータベースで非常に多くの無効なタプルが発生する可能性があることが判明しました。この問題により、特に UI からインテグレーションリストにアクセスする場合や、インテグレーションのアクティビティーを更新する場合など、データベースからの読み取りが必要な操作が一般的に遅くなります。この問題を回避するには、SQL ステートメント VACUUM FULL ANALYSE jsondb を実行して、データベースのメンテナンスを定期的に行います。

以下にしたがって、定期的にメンテナンスを行います。

# check to see if there are dead tuples (not vacuumed)
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum FROM pg_stat_all_tables WHERE relname = \'jsondb\'|psql -U syndesis"

 schemaname | relname | n_live_tup | n_dead_tup |        last_autovacuum
------------+---------+------------+------------+-------------------------------
 public     | jsondb  |      26893 |     491210 | 2019-07-17 09:26:51.264029+00
(1 row)

# since there are 491210 dead tuples, perform the following

# scale down the server
$ oc scale --replicas=0 dc syndesis-server

# terminate all running connections
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT pg_terminate_backend\(a.pid\) FROM pg_locks l join pg_stat_activity a ON a.pid = l.pid WHERE l.mode = \'ExclusiveLock\' AND a.usename = \'syndesis\'|psql -U syndesis"
FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
	This probably means the server terminated abnormally
	before or while processing the request.
connection to server was lost
command terminated with exit code 2

# the preceding FATAL error is expected, because the statement also closes the connection psql is using

# execute `VACUUM FULL ANALYSE`
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo VACUUM FULL ANALYSE jsondb|psql -U syndesis"
VACUUM

# scale up server
$ oc scale --replicas=1 dc syndesis-server
5458 Operator tries to update outdated Syndesis resource

Operator を使用して Fuse Online をインストールすると、以下のエラーが複数回発生しますが、インストール自体に大きな影響はないため、無視しても問題はありません。

{"level":"error","ts":1558617960.2453232,"logger":"controller","msg":"Error reconciling","action":"*action.startupAction","phase":"Starting","error":"Operation cannot be fulfilled on syndesises.syndesis.io \"app\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"github.com/syndesisio/syndesis/install/operator/vendor/github.com/go-logr/zapr.(*zapLogger).Error\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/github.com/go-logr/zapr/zapr.go:128\ngithub.com/syndesisio/syndesis/install/operator/pkg/controller/syndesis.(*ReconcileSyndesis).Reconcile\n\t/go/src/github.com/syndesisio/syndesis/install/operator/pkg/controller/syndesis/syndesis_controller.go:120\ngithub.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:215\ngithub.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func1\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:158\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.Until\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88"}
ENTESB-10577 Apicurito does not support YAML Open API spec files
Fuse 7.4 on OpenShift では、Apicurito はデフォルトで OpenAPI 仕様ファイルを YAML 形式で生成しますが、生成された YAML ファイルを再インポートできません。現在、JSON 形式のみを Apicurito にインポートできます。
667 'null' when using "ItemAt" transformation from List<> → Number
ItemAt 変換を使用して List から Double へマップすると、データマッパーによって例外がスローされます。
1558 "Save as draft" and "Publish" buttons
Save as draft ボタンと Publish ボタンのいずれかをクリックし、手順が開始されても、両方のボタンがアクティブなままになります。
698 DB Connector: SQL parser doesn’t recognize parameters for LIKE
LIKE キーワードが含まれる SQL ステートメント (例: DELETE FROM TODO WHERE task LIKE ‘:#param’) では、LIKE キーワードを :#param などのデータマッパーパラメーターとともに使用できません。

7.3. Fuse on OpenShift

このセクションでは、OpenShift 上の Fuse アプリケーションのデプロイメントに影響する問題を取り上げます。特定のコンテナーに影響する問題の詳細は、Spring Boot、Fuse on Apache Karaf、および Fuse on JBoss EAP のセクションも参照にしてください。Fuse on OpenShift ディストリビューションの既知の問題を以下に示します。

ENTESB-10817 Openshift 4.1 + FMP: Unexpected response (403 Forbidden), to the authorization request.Missing header:[Location]!

OneShift Container Platform (OCP) 4.1 で、oc login コマンドによって作成された既存のセッションに依存せずに、fabric8-maven-plugin が Fabric8 の Kubernetes クライアント実装を使用して OpenShift に対して認証を行うと、以下のエラーが発生します。

[ERROR] Failed to execute goal org.jboss.redhat-fuse:fabric8-maven-plugin:7.4.0.fuse-740024:build (default) on project fabric8-maven-sample-zero-config: Failed to execute the build: Unable to build the image using the OpenShift build service: Unexpected response (403 Forbidden), to the authorization request. Missing header:[Location]!

特に、Tooling User GuideFuse on OpenShift クイックスタートサンプルをビルドおよびデプロイする手順では、fabric8-maven-plugin 自体が直接 OpenShift に対して認証を行うことに依存しています。「Deploying the Fuse Integration project to OpenShift」の手順にしたがって、プロジェクトを OCP 4.1 クラスターにデプロイする場合は、ステップ 5 を以下のように変更します。

  1. アプリケーションをデプロイする OCP 4.1 クラスターの OpenShfit コンソールにログインします。
  2. OpenShift コンソールの右上隅にあるユーザー名をクリックし、メニューオプション Copy Login Command を選択します。これにより、oc login https://192.168.42.218:8443 --token=xxxxxxxx 形式の文字列がクリップボードにコピーされます。xxxxxxxx はセッショントークンを表すベース 64 エンコードの文字列になります。
  3. VM arguments ペインから、-Dkubernetes.auth.basic.password=admin 設定を削除し、-Dkubernetes.auth.token=xxxxxxxx に置き換えます。xxxxxxxx の部分はクリップボードの文字列から取得したセッショントークンに置き換えます。
注記

通常、Fuse on OpenShift Guide の例やチュートリアルは、oc login コマンドによって作成されたセッションに依存します。そのため、これらの例の 1 つの手順にしたがえば、このエラーは発生しません。

ENTESB-10694 Problem using Fuse Console on OCP4.1 beta

OpenShift 4 で Fuse Console で Fuse サービスを管理する場合、OperatorHub のコミュニティーオペレーターを使用してコミュニティーバージョン (Hawtio) をインストールする必要があります。OpenShift Web コンソールのメインカタログから OperatorHub にアクセスします。

注記

Kubernetes Operator は、OpenShift (または Kubernetes) アプリケーションのインストールおよび管理を簡単にするスクリプトです。

Fuse Console プロキシーと Jolokia エージェントとの間のコネクションをセキュアにするには、コミュニティーバージョンの Fuse Console をインストールし、それをデプロイする前にクライアント証明書を生成、署名、およびデプロイする必要があります。OpenShift 4 で Fuse Console をセキュアにする方法については、README ファイル を参照してください。

ENTESB-10577 Apicurito does not support YAML Open API spec files
Fuse 7.4 on OpenShift では、Apicurito はデフォルトで OpenAPI 仕様ファイルを YAML 形式で生成しますが、生成された YAML ファイルを再インポートできません。現在、JSON 形式のみを Apicurito にインポートできます。

7.4. Fuse on Spring Boot

Fuse on Spring Boot の既知の問題は次のとおりです。

ENTESB-11164 Missing qpid-jms-client in SB2 BOM

Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM (Bill of Material) ファイルは正しくないバージョンの Qpid JMS クライアント用の org.apache.qpid:qpid-jms-client Maven アーティファクトを参照します。Maven プロジェクトで正しい (Red Hat がサポートする) バージョンの org.apache.qpid:qpid-jms-client を使用するには、以下の依存関係をプロジェクトの POM ファイルに追加します。

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-amqp</artifactId>
            <exclusions>
                 <exclusion>
                          <groupId>org.apache.qpid</groupId>
                           <artifactId>qpid-jms-client</artifactId>
                 </exclusion>
                 <exclusion>
                          <groupId>org.apache.qpid</groupId>
                           <artifactId>proton-j</artifactId>
                 </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.qpid</groupId>
            <artifactId>qpid-jms-client</artifactId>
            <version>0.40.0.redhat-00001</version>
        </dependency>
        <dependency>
            <groupId>org.apache.qpid</groupId>
            <artifactId>proton-j</artifactId>
            <version>0.31.0.redhat-00001</version>
        </dependency>
ENTESB-11163 Incorrect version of AMQ client in SB2 BOM in Fuse 7.4.0.CR4
Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM ファイルは正しくないバージョンの org.apache.activemq:activemq-client Maven アーティファクトを参照します。
サポートされない Camel jBPM コンポーネントを参照する Spring Boot 2 の BOM
Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM (Bill of Material) が現在 Fuse でサポートされていない Camel jBPM コンポーネントを参照します。

7.5. Fuse on Apache Karaf

Fuse on Apache Karaf の既知の問題は次のとおりです。

ENTESB-8140 Start level of hot deploy bundles is 80 by default

Fuse 7.0 GA リリースの Apache Karaf コンテナーでは、ホットデプロイバンドルの開始レベルがデフォルトで 80 になっています。これにより、同じ開始レベルを持つシステムバンドルや機能が多く存在するため、ホットデプロイバンドルに問題が発生することがあります。この問題を回避し、ホットデプロイバンドルが確実に開始するようにするには、etc/org.apache.felix.fileinstall-deploy.cfg ファイルを編集し、felix.fileinstall.start.level 設定を以下のように変更します。

felix.fileinstall.start.level = 90
ENTESB-7664 Installing framework-security feature kills karaf

framework-security オプションを使用して --no-auto-refresh OSGi 機能をインストールしないと、Apache Karaf コンテナーがシャットダウンします。以下に例を示します。

feature:install -v --no-auto-refresh framework-security

7.6. Apache Camel

Apache Camel の既知の問題は次のとおりです。

ENTESB-11060 [camel-linkedin] V1 API is no longer supported
Fuse 7.4.0 では、Camel LinkedIn コンポーネントが LinkedIn サーバーと通信できなくなりました。これは、LinkedIn でサポートされなくなった LinkedIn Version 1.0 API を使用して実装されているためです。Fuse の今後のリリースで Camel LinkedIn コンポーネントが更新され、Version 2 API を使用するようになる予定です。
ENTESB-7469 Camel Docker component cannot use Unix socket connections on EAP
Fuse 7.0 より、camel-docker コンポーネントは UNIX ソケットではなく REST API のみを介して Docker に接続できます。
ENTESB-5231 PHP script language does not work
PHP の OSGi バンドルがないため、PHP スクリプト言語は Apache Karaf コンテナー上の Camel アプリケーションでサポートされません
ENTESB-5232 Python language does not work
Python の OSGi バンドルがないため、Python スクリプト言語は Apache Karaf コンテナー上の Camel アプリケーションでサポートされません
ENTESB-2443 Google Mail API - Sending of messages and drafts is not synchronous
メッセージまたは下書きを送信すると、応答には ID を持つ Message オブジェクトが含まれます。API への別の呼び出しを介してこのメッセージを即座に取得できない可能性があります。このような場合、待機して呼び出しを再試行する必要があります。
ENTESB-2332 Google Drive API JSON response for changes returns bad count of items for the first page
変更に対する Google Drive API JSON 応答によって返される最初のページのアイテム数は適切でありません。リスト操作の maxResults を設定すると、最初のページにすべての結果が返されないことがあります。この場合、複数のページを確認して完全リストを取得する必要があります (新しいリクエストに pageToken を設定して行います)。