Skip to content

Commit 1b827d9

Browse files
Merge commit from fork
* Fix #GHSA-ph3g-gc8r-mjh5: USE_NBACKUP_UTILITY allowed full ALTER DATABASE SCL_check_database() contained a shortcut that granted any holder of USE_NBACKUP_UTILITY permission for all ALTER DATABASE clauses, not just backup-related ones (BEGIN/END BACKUP, ADD/DROP DIFFERENCE FILE). - Remove the shortcut from SCL_check_database() in scl.epp - Make AlterDatabaseNode::checkPermission() clause-aware: allow USE_NBACKUP_UTILITY only when no non-backup clauses are present * USE_NBACKUP_UTILITY: require full ALTER DATABASE for difference file
1 parent 466d61d commit 1b827d9

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

src/dsql/DdlNodes.epp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17594,6 +17594,22 @@ string AlterDatabaseNode::internalPrint(NodePrinter& printer) const
1759417594

1759517595
void AlterDatabaseNode::checkPermission(thread_db* tdbb)
1759617596
{
17597+
Jrd::Attachment* const attachment = tdbb->getAttachment();
17598+
17599+
const unsigned nbackupClauses = CLAUSE_BEGIN_BACKUP | CLAUSE_END_BACKUP;
17600+
17601+
const bool hasNonBackupClauses =
17602+
(clauses & ~nbackupClauses) ||
17603+
differenceFile.hasData() ||
17604+
setDefaultCharSet.hasData() ||
17605+
setDefaultCollation.hasData() ||
17606+
linger >= 0 ||
17607+
ssDefiner.isAssigned() ||
17608+
cryptPlugin.hasData();
17609+
17610+
if (!hasNonBackupClauses && attachment->locksmith(tdbb, USE_NBACKUP_UTILITY))
17611+
return;
17612+
1759717613
SCL_check_database(tdbb, SCL_alter);
1759817614
}
1759917615

src/jrd/scl.epp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,6 @@ void SCL_check_database(thread_db* tdbb, SecurityClass::flags_t mask)
317317
if (att_class && (att_class->scl_flags & mask))
318318
return;
319319

320-
if (mask == SCL_alter && attachment->locksmith(tdbb, USE_NBACKUP_UTILITY))
321-
return;
322-
323320
if (mask == SCL_drop && attachment->locksmith(tdbb, DROP_DATABASE))
324321
return;
325322

0 commit comments

Comments
 (0)