Skip to content

Application tech debt register

This page consolidates all CRITICAL and HIGH severity tech debt findings from all library analyses performed against Claims Legal.

Critical findings

Library Finding Impact Recommended action
SAIF.Business.Claim.Legal clsHearingLocation.ValidateState and clsOtherFirm.ValidateState build SQL by concatenating the State value directly into the query text instead of using a bound parameter. SQL injection risk in hearing-location and other-firm maintenance flows, which could allow unauthorized data disclosure or modification. Replace string concatenation with bound parameters, add focused security tests, and review similar ad hoc validation queries for the same pattern.

High findings

Library Finding Impact Recommended action
Platform (application-wide) The application is built on ASP.NET WebForms targeting .NET Framework and relies on IIS-hosted NTLM/Kerberos Windows authentication for all internal users; there is no portable, framework-independent authentication layer.* Ties the application to Windows-domain-joined IIS hosting, blocking migration to modern cross-platform or cloud-native hosting models without a parallel authentication rework, and leaves the app dependent on legacy NTLM infrastructure with its known relay/downgrade weaknesses. Plan a phased migration path (e.g., to ASP.NET Core with a modern identity provider) and, in the interim, harden NTLM configuration (disable NTLMv1, enforce channel binding) and document the authentication dependency for infrastructure teams.
SAIF.Application.Claim ClaimServices.HasOverrideAcess is the only confidential-claim override path, but the repository analysis could not resolve the owning library or inspect the logic behind it. The single mechanism that can bypass the conflict-claim access denial (BR-APP-001) is undocumented, making its correctness and audit posture unverifiable. Trace the dependency to its owning assembly, document the override rules, and add an explicit contract or wrapper interface in the application layer.
SAIF.Application.Claim CollateralHealthClaim and ClaimUserAccess.HealthIssueAccess are declared, but ClaimSecurity.CheckClaim never consults them, so the resource key has no effect. Health-issue claim access restrictions intended by the CollateralHealthClaim AD resource are not actually enforced, creating a false sense of security around health-issue claim data. Align ClaimSecurity.CheckClaim with the intended health-issue resource check and add regression tests for health-issue claim access.
SAIF.Presentation.Web.Controls.PopUps.Infragistics111 ImageMovePopup.CheckImageSecurity returns True for six system mail IDs without performing an AD authorization check. A hard-coded allow-list bypasses centralized authorization for system mailbox image-move actions, making the access grant unauditable and inflexible to change. Replace the hard-coded allow-list with an auditable service-account authorization path or an explicit centrally managed entitlement check.
SAIF.Application ServiceResponse.ProcessException re-reads ex.InnerException on each loop iteration instead of advancing through the current exception chain, creating an infinite-loop risk on nested exceptions. A multi-level nested exception can cause the exception-processing loop to hang, potentially exhausting a request thread or worker process. Fix the loop to advance through the current inner exception, add a unit test with a multi-level exception chain, and backfill coverage for service-response error handling.
SAIF.Application UserAccess.CheckAccess discards its computed result and provides no observable enforcement beyond cache warming. Callers may believe CheckAccess performs an authorization gate when it does not, risking an unintended access-control gap wherever it is relied upon as an enforcement point. Either remove the method and migrate callers to HasAccess, or change it to return a meaningful authorization outcome and add call-site tests.
SAIF.Business.Policy PolicyInformation.PolicyMinimumPremium wraps the stored-procedure call in an empty Catch block and can silently return 0 when the lookup fails. A failed premium lookup is indistinguishable from a genuine zero-premium result, risking incorrect downstream premium calculations without any visible error. Replace the empty catch with structured error handling, log failures, and distinguish an actual zero premium from a lookup failure.
SAIF.Services.Export ExportServices.GetCSV skips null fields instead of emitting empty columns, which can create column-misaligned CSV output. Exported assignment-list and other CSV files may have shifted columns whenever a null field is encountered, corrupting downstream consumption of the export (Generate reports and PDF previews). Emit explicit empty fields for null values and add a regression test that verifies consistent column counts across rows.
SAIF.Business.View.Policy clsMCOCollection and clsPolicyMCOCollection execute the same stored procedure with near-identical retrieval logic. Duplicated retrieval logic risks the two code paths diverging over time, producing inconsistent results for what should be the same underlying data. Consolidate the two collection paths behind one implementation or one shared retrieval helper to eliminate divergence risk.
SAIF.Business.View.Policy PolicyAssociations.vb duplicates the newer association model implemented through clsAssociationTypeCode and clsPolicyAssociationFactory. Maintaining two parallel association models increases maintenance burden and risks inconsistent policy-association data being returned depending on which path a caller uses. Retire the legacy association path or formally designate one canonical association model and migrate consumers to it.
SAIF.Application The library declares two different AppSecurityRole enum types with the same members: AppManagerBase.AppSecurityRole and SAIF.Application.AppSecurityRole. Ambiguity over which enum downstream consumers reference for security-role state risks type-mismatch bugs and inconsistent security-role handling across the application. Remove the duplicate declaration or alias one canonical type, then update downstream references and serialization points to use a single enum.
SAIF.Services.Printing documentGeneratorServiceUrl, documentMSMQPath, idmFilePath, and sqlReportingServiceUrl are required at runtime, but the library configs provide no local fallback or visible source for those values. Missing or misconfigured environment values can cause silent or hard-to-diagnose report/PDF generation failures in production. Publish an explicit configuration contract for the environment service, validate keys on startup, and surface missing-key failures with actionable diagnostics.
SAIF.Business.Claim.Legal SAIF.Business.Claim.Legal depends transitively on BDS_USER, bdsDatabase, and BDS_DATABASENAME through SAIF.Business.View.Policy, but those keys are not declared in the library itself. Undocumented transitive configuration dependencies risk deployment failures that are difficult to trace back to the missing SQL Server BDS keys. Document the transitive configuration contract in deployment guidance and add startup validation in the host application for required BDS keys.

Summary

Severity Count
CRITICAL 1
HIGH 13
Total 14

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • SAIF.Business.Claim.Legal/clsHearingLocation.vb
  • SAIF.Business.Claim.Legal/clsOtherFirm.vb
  • SAIF.Application.Claim/ClaimAppManager.vb
  • SAIF.Application.Claim/ClaimSecurity.vb
  • SAIF.Presentation.Web.Controls.PopUps.Infragistics111/ImageMovePopup.vb
  • SAIF.Application/ServiceResponse.vb
  • SAIF.Application/UserAccess.vb
  • SAIF.Business.Policy/PolicyInformation.vb
  • SAIF.Services.Export/ExportServices.vb
  • SAIF.Business.View.Policy/clsMCOCollection.vb
  • SAIF.Business.View.Policy/PolicyAssociations.vb
  • SAIF.Application/AppManagerBase.vb
  • SAIF.Application/Enums.vb
  • SAIF.Services.Printing/Web.config
  • Legal/Web.config