[
https://issues.apache.org/jira/browse/HBASE-30250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18107153#comment-18107153
]
mazhengxuan commented on HBASE-30250:
-------------------------------------
Hi Andrew,
I read through the design doc and the current shell code. I'd like to pick up a
small first piece: the online configuration commands (`update_config`,
`update_all_config`, and `update_rsgroup_config`), including focused tests for
the legacy non-interactive syntax and the new per-command CLI path.
These commands map directly to the existing `Admin.updateConfiguration(...)`
overloads and do not need custom result formatting, so this seems like a
reasonably self-contained place to start. Is anyone already working on this
group? Also, is there an initial branch or patch for the `hbase-newshell`
module and command catalog that I should build on?
If the command groups are not ready to split out yet, I can start with the
non-interactive compatibility tests for these three commands instead.
> Newshell: An Alternative Interactive and CLI Shell
> --------------------------------------------------
>
> Key: HBASE-30250
> URL: https://issues.apache.org/jira/browse/HBASE-30250
> Project: HBase
> Issue Type: New Feature
> Components: security, shell
> Reporter: Andrew Kyle Purtell
> Priority: Major
>
> Design document:
> [[link]|https://docs.google.com/document/d/1i3xJn-fBJELD-1KG06HzViWBhH8ZC_eh2zRdo4VPBmU/edit?tab=t.0]
> HBase ships an interactive operator shell implemented as a JRuby IRB.
> Operators rely on this shell for creating and altering tables, putting and
> scanning data typically for investigative or exploratory reasons,
> snapshotting, moving regions, managing replication peers, granting
> permissions, configuring quotas, manipulating region server groups, and many
> less common operations.
> This issue proposes a replacement shell, named simply {_}newshell{_}, that
> delivers the same operator command set, preserves the existing input syntax
> for single one-shot commands for those UNIX shell scripts and runbooks that
> depend on it, but is implemented entirely in Java using only libraries that
> are already present on the project’s compilation classpath. Newshell is
> delivered as a new Maven module, hbase-newshell, and is launched through a
> new subcommand of the existing bin/hbase script invoked as ./bin/hbase
> newshell.
> The replacement ultimately serves the goals of removing the project’s
> dependency on JRuby and on the jruby-complete uber jar. It does so in a way
> that allows the existing JRuby shell and newshell to coexist for some period,
> so that operators and downstream distributions can migrate at their own pace.
> jruby-complete contains, in addition to the JRuby interpreter itself, a full
> Ruby standard library, the entire RubyGems infrastructure, a curated set of
> bundled gems including rake, rdoc, irb, bcrypt, the OpenSSL gem, the protobuf
> gem, and assorted developer tooling, and a substantial number of Java-side
> libraries that the JRuby runtime needs for its own internal use, including
> joni, jcodings, jffi, jnr-ffi and its native bridges, bytelist, jzlib, the
> ASM bytecode toolkit, the OSGi core API, the Jansi console library which
> transitively pulls HawtJNI, the SnakeYAML parser, and the BouncyCastle
> cryptographic suite. Every one of these components accretes its own stream of
> published vulnerabilities over time. Because they are physically bundled into
> jruby-complete, every advisory against any of them shows up on HBase’s
> software bill of materials as soon as a downstream consumer runs a
> vulnerability scanner against the binary distribution, regardless of whether
> the shell exercises the affected code path.
> The current pinned version of jruby-complete in HBase’s 2.5 and 2.6 releasing
> lines is version 9.3.15.0, which is the final release of the JRuby 9.3 line.
> JRuby upstream marked the 9.3 line end-of-life when it shipped 9.3.15.0 in
> June 2024, with no further backports planned. The most consequential
> consequence of that policy is that CVE-2025-46551, a hostname verification
> bypass in the jruby-openssl gem disclosed in May 2025 and assigned moderate
> severity, affects every 9.3.x release and is fixed only on the 9.4 and 10.0
> series. An earlier attempt to onboard a 9.4 release (HBASE-27921) was
> abandoned. A later attempt against 9.4.8.0 (HBASE-28250 and HBASE-28968)
> succeeded for the trunk and the 2.7 line only by carrying a monkey-patched
> copy of upstream’s irb gem to compensate for incompatible API changes. None
> of that work is backportable to the 2.5 and 2.6 lines that everyone runs in
> production. (Although we could decide to move forward with a compatibility
> break.)
> Recent examples of CVE issues in 9.3 include the cluster of REXML
> denial-of-service advisories from 2024 covering CVE-2024-35176,
> CVE-2024-39908, CVE-2024-41123, CVE-2024-41946, CVE-2024-43398, and
> CVE-2024-49761; the RDoc deserialization advisory CVE-2024-27281; the regex
> engine out-of-bounds read CVE-2024-27282; the StringIO buffer over-read
> CVE-2024-27280; ReDoS findings in URI and Time captured by CVE-2023-36617,
> CVE-2023-28755, and CVE-2023-28756; the Net::IMAP memory-allocation
> denial-of-service CVE-2025-43857; an ERB CVE published as CVE-2026-41316;
> older but still scanner-flagged WEBrick request-smuggling and HTTP-splitting
> advisories CVE-2020-25613, CVE-2019-16254, and CVE-2019-16201; the CGI cookie
> prefix advisory CVE-2021-41819; and the Date ReDoS CVE-2021-41817. To these
> must be added the SnakeYAML issues, including the critical severity
> CVE-2022-1471 deserialization advisory. The BouncyCastle versions bundled by
> the JRuby runtime carry their own thread of advisories, including
> CVE-2024-29857, CVE-2024-30171, and CVE-2024-30172. The 2.x line of jline
> that the JRuby runtime depends on has itself been abandoned upstream and is
> vulnerable to CVE-2013-2035. The RubyGems infrastructure has a cluster of
> seven distinct advisories, including the critical CVE-2018-1000076. Removing
> the JRuby dependency removes all of these bundled software vulnerabilities,
> including those of JRuby itself.
> Beyond the question of upgrading to a version of jruby-complete that does not
> carry a long list of software vulnerabilities, is the fundamental need for an
> IRB in the first place. This proposal describes JRuby-free alternatives that
> may suffice instead (a new native command format, supporting also a
> JRuby-alike syntax) or improve integration (a proper CLI integration).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)