WiFiT v3.0.0-rc.1: core rewrite and Android validation - #2
Draft
TuHiN22 wants to merge 29 commits into
Draft
Conversation
Major Features: - Complete PIN generation with all 30 algorithms - Deterministic resumable split-half brute force - Enhanced scanner with WPS version/lock/WSC/WPA3 detection - Robust subprocess management with mandatory timeouts - Comprehensive test suite (83 tests passing) Security Improvements: - Zero operational shell=True usage - All subprocess calls use validated argv lists - Bounded resources and finite timeouts - Credential files protected with mode 0600 - Conservative process management with journaling Infrastructure: - Modular wifit_core package architecture - Python 3.10+ with type hints - PEP 517/518 compliant packaging - Zero mandatory runtime dependencies - Comprehensive documentation Testing: - 83 automated tests covering core functionality - Deterministic fake-tool tests (no RF transmission) - High coverage targets (85% overall, 90% critical) Documentation: - CHANGELOG.md with semantic versioning - CONTRIBUTING.md with security guidelines - RELEASE_NOTES with hardware validation checklist - Required legal warning in README/CLI/banner Status: Release Candidate (hardware validation pending) Target: OneShot-Extended commit 12d24a62 functional parity Platform: Rooted Android + Termux (Python 3.10+) Refs: #WiFiT-v3
- Created HARDWARE_VALIDATION_PROCEDURE.md with 8-phase validation plan - Added automated validation scripts for all testing phases - Implemented master script (run_all_validation.sh) for complete testing - Created individual phase scripts: - 01_verify_environment.sh - Environment and dependency verification - 02_test_scanner.sh - Live scanner validation - 03_test_pin_generation.sh - PIN algorithm testing - generate_html_report.sh - HTML report generation - All validation output saved to validation_logs/ directory - Updated README.md to remove banner warning (keep in Legal section only) Validation Framework: - Phase 1: Environment Setup (15 min) - Phase 2: Scanner Validation (20 min) - Phase 3: PIN Generation (10 min) - Phase 4: Process Management (15 min) - Phase 5: Live WPS Attacks (60 min) - REQUIRES AUTHORIZATION - Phase 6: Reporter Validation (10 min) - Phase 7: Stress Testing (120 min) - Phase 8: Recovery & Cleanup (15 min) Total validation time: 4-5 hours All logs captured for tracking and debugging HTML report generated with pass/fail status Usage: sudo bash validation/run_all_validation.sh <TEST_AP_BSSID>
RC2 Development Complete: Core Modules Added: - wifit_core/wps_attack.py: Live WPS attacks via wpa_supplicant control * PIN/null-PIN/empty-PIN/zero-PIN support * PBC with targeted BSSID * First-half validity detection * Pixie Dust parameter extraction - wifit_core/pixie_dust.py: Validated pixiewps wrapper * Complete parameter validation * Timeout and force flag support * Structured result parsing Hardware Validation (Phase 4-8): - 04_test_process_management.sh: Process lifecycle tests - 05_test_wps_attacks.sh: Live attack framework with authorization - 06_test_reporter.sh: Export system validation - 07_stress_bruteforce.sh: 1000+ PIN stress test - 08_test_recovery.sh: Session resume and cleanup CI/CD: - GitHub Actions workflow for Python 3.10/3.11/3.12 - Automated testing, linting, security scanning - Package build verification - Coverage reporting Test Suite: - 103 tests passing (100%) - Added test_wps_attack.py (6 tests) - Added test_pixie_dust.py (6 tests) - Coverage maintained at ~90% Changes: - Version bumped to 3.0.0-rc.2 - Updated CHANGELOG.md with RC2 details - Enhanced wifit_core exports Ready for hardware validation on authorized test networks.
- Update actions/upload-artifact from v3 to v4 - Update codecov/codecov-action from v3 to v4 Fixes CI failure: 'deprecated version of actions/upload-artifact: v3' See: https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/
- Add ATTACH command to wpa_supplicant controller for event monitoring - Distinguish null PIN from empty PIN (separate methods and code paths) - Fix pixiewps success detection (require PIN extraction, not just exit 0) - Correct all validation script API calls to match actual public APIs - Integrate RC2 modules into wifit.py smart_bruteforce (deterministic split-half) - Remove || true from CI quality gates (now enforcing failures) - Fix Windows file permission issue in BruteforceSession.save() - Remove legal warning from Phase 5 validation (keep only in README) - Update all version strings to 3.0.0-rc.3 Fixes: - wps_attack: Missing ATTACH for unsolicited events - wps_attack: Null PIN delegated to empty (now separate) - pixie_dust: False positive on exit 0 without PIN - validation 04: discover_interferers -> discover, restore_stopped -> restore - validation 05: generate_pins -> get_likely_pins, format_pin -> wps_checksum - validation 05: BruteforceSession.create -> constructor + start - validation 06: save_text/csv/json -> export with format parameter - validation 08: Session.load -> constructor + start - ci.yml: Removed || true from ruff, mypy, bandit (enforce quality) - wifit.py: Integrated BruteforceSession for resumable attacks Tests: All 103 tests passing Status: Ready for hardware validation Next: Android/Termux validation with controlled test AP
Complete RC3 development documentation with: - All 11 blocking issues fixed and verified - Hardware validation instructions - Success criteria and next steps - Git status and repository state - User action items Status: RC3 complete, ready for hardware validation
CRITICAL FIXES: - wps_attack: Add started_at to ALL AttackResult paths (production bug) - wps_attack: Use separate wall clock for timestamps vs timeout deadline - wps_attack: Fix broadcast PBC BSSID (was rejecting 'BROADCAST' string) - validation 04-08: Fix Bash counter bug (((TESTS_PASSED++)) fails with set -e) - validation 04: Fix ProcessSnapshot constructor (obsolete cmdline/started_at) - validation 05: Fix AttackResult test (missing started_at caused validation error) - validation 06: Fix AttackResult test (same timestamp issue) Validation Failures Root Causes: - Phases 4,5,6,8 failed due to postfix ++ evaluating to 0 under set -e - Phase 6 failed due to finished_at < started_at validation error - All WPS attacks would fail with same timestamp validation error Changed counter pattern from: ((TESTS_PASSED++)) # Fails when 0 To: TESTS_PASSED=\ # Always succeeds Changed timing pattern from: started_at = time.time() # monotonic timer finished_at = datetime.now(timezone.utc) # wall clock To: wall_started_at = datetime.now(timezone.utc) # wall clock for both deadline = time.time() + timeout # monotonic for timeout Tests: All 103 passing Status: Critical production defects fixed Next: Hardware validation rerun
CRITICAL FIXES: - Phase 4: Fix shell quoting (Don't -> Do not to avoid apostrophe termination) - Broadcast PBC: Remove SSID fallback for BSSID (was causing validation error) - Timeout clock: Use time.monotonic() instead of time.time() (correct for timeouts) - Release gate: Require ALL 8 phases instead of any 6 (was accepting failures) - Version reporting: Dynamic from wifit_core.__version__ (was hardcoded rc.1) Issues Fixed: 1. Phase 4 Test 7 failed due to apostrophe in comment terminating shell quote 2. Broadcast PBC success could use progress.essid as BSSID, failing validation 3. Timeout deadlines used wall clock (time.time) instead of monotonic 4. Release gate accepted 6/8 phases, hiding critical failures like Phase 4 5. HTML/JSON reports showed rc.1 when testing rc.4 Changes: - validation/04: Comment apostrophe removed - wps_attack.py: All deadline checks use time.monotonic() - wps_attack.py: Broadcast PBC never substitutes SSID for BSSID - validation/run_all: Require PASSED_PHASES -eq 8 (not -ge 6) - validation/run_all: Dynamic version from Python import - validation/generate_html: Remove hardcoded rc.1 from title Tests: 103/103 passing Status: Phase 4 should now pass, release gate now correct Next: Hardware validation with all 8 phases required
- Fix PBC timeout clock mismatch (monotonic vs wall time) - Fix broadcast BSSID preservation (None no longer converted to empty string) - Fix validation status logic (JSON/HTML/exit code all require 8/8) - Remove hardcoded version strings from validation scripts - Update README with validation procedure and changelog - Add documentation exclusion policy to .gitignore - Fix CI lint failures (bare except, unused variables) - Update ruff configuration to new format
- Add type: ignore for Windows-only subprocess.CREATE_NEW_PROCESS_GROUP - Add type: ignore for POSIX-only os.killpg, signal.SIGKILL, os.fchmod - Add type: ignore for POSIX-only socket.AF_UNIX (Unix domain sockets) - Fix __exit__ return types (None instead of bool for context managers) - Fix WiFiScanner._command_runner type annotation (CommandRunner | None) - All mypy checks now passing
Platform-specific type ignores (POSIX-only APIs like os.fchmod, os.killpg, socket.AF_UNIX) appear as 'unused' on Linux but are required on Windows. Setting warn_unused_ignores = false allows type ignores to work on both platforms without errors. Verified on both platforms: - Linux (--platform linux): Success - Windows: Success
RELEASE BLOCKER FIXES: 1. Mandatory Git Provenance (CRITICAL) - Validation now FAILS if Git SHA unavailable - Collects full 40-char SHA (not just short) - Detects detached HEAD vs branch - Records exact tag if present - Complete dirty status (working tree + index + untracked) - safe.directory config for Termux root context - JSON has dedicated git_provenance section 2. Centralized Version (CRITICAL) - wifit.py imports __version__ from wifit_core - Banner uses dynamic version formatting - Removed hardcoded rc.5 from docstring and banner - Single source of truth Version: 3.0.0-rc.7 Remaining work for stable: - Controller startup exception safety - Comprehensive controller tests (~20 tests) - Validation phase accuracy (rename or implement) - Validation security improvements See RC7_RELEASE_BLOCKERS.md for complete checklist.
- Wrap WPASupplicantController.start() with try/except cleanup - Add 22 new controller tests covering all terminal paths - Tests verify exception safety, PIN/null-PIN/PBC attacks, cleanup - Tests skip on Windows, run fully on Linux/Termux - Test suite: 103 passing + 22 platform-specific Fixes rc.7 blockers #3 and #4: - Controller startup now exception-safe - Complete test coverage for wpa_supplicant controller All tests passing. Ready for hardware validation.
The _receive_events() method keeps calling recv() in a loop until timeout. On Linux, mock side_effect exhaustion raises StopIteration instead of returning empty data. Changes: - Add socket.timeout() exceptions after event responses - Fixes StopIteration errors in 10 tests - Fix timeout message assertions (30.0s vs 30s) - All tests now pass on Linux CI Tests verified: - Windows: 6 passed, 22 skipped - Linux CI: Expected 125 passed (103 + 22)
Two remaining test failures fixed: - Use actual wpa_supplicant event format: WPS-M5D not 'WPS M5 sent' - Fix BSSID test expectation: normalize_bssid() uppercases Changes: - test_pin_nack_first_half_valid: Use WPS-M5D event format - test_pin_nack_first_half_invalid: Use WPS-M3D event format - test_pbc_targeted_success: Expect uppercase BSSID All 125 tests should now pass on Linux CI.
…eanup Critical validator fixes: - Use command-scoped safe.directory (read-only, no repo mutation) - Capture Git provenance at START and END, fail if SHA/worktree changes - Validate BSSID format once upfront and normalize to uppercase - Require clean worktree at both start and end of validation JSON generation security: - Pass data via environment variables instead of string interpolation - Use quoted heredoc to prevent injection - Validate JSON output is non-empty before proceeding Controller cleanup improvements: - Verify daemon termination with kill -0 checks (Linux) - Use kill -9 if process doesn't terminate within 1 second - Handle missing PID file and invalid PID gracefully Documentation updates: - Update README.md from rc.6 to rc.8 - Document rc.7 achievements and rc.8 fixes in changelog - Clarify validation phase limitations Version bump: 3.0.0-rc.7 -> 3.0.0-rc.8 Fixes whitespace issues (trailing spaces removed) Addresses all critical issues from rc.7 hardware validation feedback
Fixes ruff B007 error: Loop control variable not used within loop body. The loop intentionally just repeats 10 times to poll process termination.
Fixes 'command not found' error when calling collect_git_provenance at start. Function must be defined before it's used in bash.
HTML report generator expects validation_run.branch but it was only in git_provenance.branch. Now branch is included in both sections for compatibility with HTML report generation.
…dation Critical provenance fixes for rc.9: - All git commands now fail-closed (failure = validation abort, not assumed clean) - Comprehensive start/end comparison: SHA, branch, detached state, tag, version, worktree - Version import explicitly from REPO_ROOT using sys.path.insert - Git detached HEAD state tracked separately and compared - Version comparison: WiFiT version captured at start and verified at end JSON enhancements: - Added detached HEAD boolean to git_provenance - All provenance fields properly exported HTML enhancements: - New Git Provenance section with full metadata - Displays full 40-character SHA (not just short) - Shows detached HEAD state - Shows tag (or 'none') - Shows clean/dirty worktree status with checkmark/cross Fail-closed checks (all must succeed or validation aborts): - git rev-parse HEAD (full SHA) - git rev-parse --short HEAD (short SHA) - git rev-parse --abbrev-ref HEAD (branch name) - git describe --tags --exact-match (tag, non-fatal if not on tag) - git status --porcelain (worktree status) - python import of wifit_core.__version__ (version) Version bumped: 3.0.0-rc.8 -> 3.0.0-rc.9 Addresses PATH_TO_STABLE.md items 1-6 (provenance fail-closed).
Metadata updates: - install.sh: Version header and banner (rc.1 -> rc.9) - requirements.txt: Header comment (rc.1 -> rc.9) - requirements-dev.txt: Header comment (rc.1 -> rc.9) - pyproject.toml: Changelog URL now points to README.md#changelog (CHANGELOG.md will not exist in master per documentation policy) Addresses PATH_TO_STABLE.md items #20-23 (metadata corrections).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
wifit_corepackage.iwscanning with WPS/WPA3/WSC parsing and conservative platform/process restoration.Why
This release candidate brings WiFiT to a testable, maintainable v3 architecture while preserving the existing interactive workflow. The final fixes address issues found on real Termux hardware: the missing
iproute2dependency and scanning an administratively down interface.User impact
Users get deterministic PIN generation and brute-force resumption, richer scan results, safer process handling, reliable installation from a clean Termux environment, and validation scripts that preserve the device's prior interface state.
Validation
python -m pytest tests/ -q: 91 passedshell=Trueoros.systemRelease scope
This PR targets the
v3.0.0-rc.1prerelease. Live Pixie Dust, online PIN brute-force, interruption/resume, and other extended attack-path hardware tests remain pending before a stablev3.0.0release.